mirror of
https://github.com/torvalds/linux.git
synced 2026-05-12 16:18:45 +02:00
can: statistics: add missing atomic access in hot path
Commit80b5f90158("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:80b5f90158("can: statistics: use atomic access in hot path") Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net> Link: https://patch.msgid.link/20260318173413.28235-1-socketcan@hartkopp.net Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
This commit is contained in:
parent
7a57354756
commit
46eee1661a
|
|
@ -469,7 +469,7 @@ int can_rx_register(struct net *net, struct net_device *dev, canid_t can_id,
|
|||
|
||||
rcv->can_id = can_id;
|
||||
rcv->mask = mask;
|
||||
rcv->matches = 0;
|
||||
atomic_long_set(&rcv->matches, 0);
|
||||
rcv->func = func;
|
||||
rcv->data = data;
|
||||
rcv->ident = ident;
|
||||
|
|
@ -573,7 +573,7 @@ EXPORT_SYMBOL(can_rx_unregister);
|
|||
static inline void deliver(struct sk_buff *skb, struct receiver *rcv)
|
||||
{
|
||||
rcv->func(skb, rcv->data);
|
||||
rcv->matches++;
|
||||
atomic_long_inc(&rcv->matches);
|
||||
}
|
||||
|
||||
static int can_rcv_filter(struct can_dev_rcv_lists *dev_rcv_lists, struct sk_buff *skb)
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ struct receiver {
|
|||
struct hlist_node list;
|
||||
canid_t can_id;
|
||||
canid_t mask;
|
||||
unsigned long matches;
|
||||
atomic_long_t matches;
|
||||
void (*func)(struct sk_buff *skb, void *data);
|
||||
void *data;
|
||||
char *ident;
|
||||
|
|
|
|||
|
|
@ -196,7 +196,8 @@ static void can_print_rcvlist(struct seq_file *m, struct hlist_head *rx_list,
|
|||
" %-5s %03x %08x %pK %pK %8ld %s\n";
|
||||
|
||||
seq_printf(m, fmt, DNAME(dev), r->can_id, r->mask,
|
||||
r->func, r->data, r->matches, r->ident);
|
||||
r->func, r->data, atomic_long_read(&r->matches),
|
||||
r->ident);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user