93da8d75a6
wg_xmit() can be called concurrently, KCSAN reported [1]
some device stats updates can be lost.
Use DEV_STATS_INC() for this unlikely case.
[1]
BUG: KCSAN: data-race in wg_xmit / wg_xmit
read-write to 0xffff888104239160 of 8 bytes by task 1375 on cpu 0:
wg_xmit+0x60f/0x680 drivers/net/wireguard/device.c:231
__netdev_start_xmit include/linux/netdevice.h:4918 [inline]
netdev_start_xmit include/linux/netdevice.h:4932 [inline]
xmit_one net/core/dev.c:3543 [inline]
dev_hard_start_xmit+0x11b/0x3f0 net/core/dev.c:3559
...
read-write to 0xffff888104239160 of 8 bytes by task 1378 on cpu 1:
wg_xmit+0x60f/0x680 drivers/net/wireguard/device.c:231
__netdev_start_xmit include/linux/netdevice.h:4918 [inline]
netdev_start_xmit include/linux/netdevice.h:4932 [inline]
xmit_one net/core/dev.c:3543 [inline]
dev_hard_start_xmit+0x11b/0x3f0 net/core/dev.c:3559
...
v2: also change wg_packet_consume_data_done() (Hangbin Liu)
and wg_packet_purge_staged_packets()
Fixes:
|
||
---|---|---|
.. | ||
selftest | ||
allowedips.c | ||
allowedips.h | ||
cookie.c | ||
cookie.h | ||
device.c | ||
device.h | ||
main.c | ||
Makefile | ||
messages.h | ||
netlink.c | ||
netlink.h | ||
noise.c | ||
noise.h | ||
peer.c | ||
peer.h | ||
peerlookup.c | ||
peerlookup.h | ||
queueing.c | ||
queueing.h | ||
ratelimiter.c | ||
ratelimiter.h | ||
receive.c | ||
send.c | ||
socket.c | ||
socket.h | ||
timers.c | ||
timers.h | ||
version.h |