Skip to content

Commit 46eee16

Browse files
hartkoppmarckleinebudde
authored andcommitted
can: statistics: add missing atomic access in hot path
Commit 80b5f90 ("can: statistics: use atomic access in hot path") fixed a KCSAN issue in can_receive() but missed to convert the 'matches' variable used in can_rcv_filter(). Fixes: 80b5f90 ("can: statistics: use atomic access in hot path") Signed-off-by: Oliver Hartkopp <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Marc Kleine-Budde <[email protected]>
1 parent 7a57354 commit 46eee16

3 files changed

Lines changed: 5 additions & 4 deletions

File tree

net/can/af_can.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -469,7 +469,7 @@ int can_rx_register(struct net *net, struct net_device *dev, canid_t can_id,
469469

470470
rcv->can_id = can_id;
471471
rcv->mask = mask;
472-
rcv->matches = 0;
472+
atomic_long_set(&rcv->matches, 0);
473473
rcv->func = func;
474474
rcv->data = data;
475475
rcv->ident = ident;
@@ -573,7 +573,7 @@ EXPORT_SYMBOL(can_rx_unregister);
573573
static inline void deliver(struct sk_buff *skb, struct receiver *rcv)
574574
{
575575
rcv->func(skb, rcv->data);
576-
rcv->matches++;
576+
atomic_long_inc(&rcv->matches);
577577
}
578578

579579
static int can_rcv_filter(struct can_dev_rcv_lists *dev_rcv_lists, struct sk_buff *skb)

net/can/af_can.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ struct receiver {
5252
struct hlist_node list;
5353
canid_t can_id;
5454
canid_t mask;
55-
unsigned long matches;
55+
atomic_long_t matches;
5656
void (*func)(struct sk_buff *skb, void *data);
5757
void *data;
5858
char *ident;

net/can/proc.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,8 @@ static void can_print_rcvlist(struct seq_file *m, struct hlist_head *rx_list,
196196
" %-5s %03x %08x %pK %pK %8ld %s\n";
197197

198198
seq_printf(m, fmt, DNAME(dev), r->can_id, r->mask,
199-
r->func, r->data, r->matches, r->ident);
199+
r->func, r->data, atomic_long_read(&r->matches),
200+
r->ident);
200201
}
201202
}
202203

0 commit comments

Comments
 (0)