Eric Dumazet
3b91237c52
net/sched: annotate lockless accesses to qdisc->empty
commit 90b2be27bb upstream.
KCSAN reported the following race [1]
BUG: KCSAN: data-race in __dev_queue_xmit / net_tx_action
read to 0xffff8880ba403508 of 1 bytes by task 21814 on cpu 1:
__dev_xmit_skb net/core/dev.c:3389 [inline]
__dev_queue_xmit+0x9db/0x1b40 net/core/dev.c:3761
dev_queue_xmit+0x21/0x30 net/core/dev.c:3825
neigh_hh_output include/net/neighbour.h:500 [inline]
neigh_output include/net/neighbour.h:509 [inline]
ip6_finish_output2+0x873/0xec0 net/ipv6/ip6_output.c:116
__ip6_finish_output net/ipv6/ip6_output.c:142 [inline]
__ip6_finish_output+0x2d7/0x330 net/ipv6/ip6_output.c:127
ip6_finish_output+0x41/0x160 net/ipv6/ip6_output.c:152
NF_HOOK_COND include/linux/netfilter.h:294 [inline]
ip6_output+0xf2/0x280 net/ipv6/ip6_output.c:175
dst_output include/net/dst.h:436 [inline]
ip6_local_out+0x74/0x90 net/ipv6/output_core.c:179
ip6_send_skb+0x53/0x110 net/ipv6/ip6_output.c:1795
udp_v6_send_skb.isra.0+0x3ec/0xa70 net/ipv6/udp.c:1173
udpv6_sendmsg+0x1906/0x1c20 net/ipv6/udp.c:1471
inet6_sendmsg+0x6d/0x90 net/ipv6/af_inet6.c:576
sock_sendmsg_nosec net/socket.c:637 [inline]
sock_sendmsg+0x9f/0xc0 net/socket.c:657
___sys_sendmsg+0x2b7/0x5d0 net/socket.c:2311
__sys_sendmmsg+0x123/0x350 net/socket.c:2413
__do_sys_sendmmsg net/socket.c:2442 [inline]
__se_sys_sendmmsg net/socket.c:2439 [inline]
__x64_sys_sendmmsg+0x64/0x80 net/socket.c:2439
do_syscall_64+0xcc/0x370 arch/x86/entry/common.c:290
entry_SYSCALL_64_after_hwframe+0x44/0xa9
write to 0xffff8880ba403508 of 1 bytes by interrupt on cpu 0:
qdisc_run_begin include/net/sch_generic.h:160 [inline]
qdisc_run include/net/pkt_sched.h:120 [inline]
net_tx_action+0x2b1/0x6c0 net/core/dev.c:4551
__do_softirq+0x115/0x33f kernel/softirq.c:292
do_softirq_own_stack+0x2a/0x40 arch/x86/entry/entry_64.S:1082
do_softirq.part.0+0x6b/0x80 kernel/softirq.c:337
do_softirq kernel/softirq.c:329 [inline]
__local_bh_enable_ip+0x76/0x80 kernel/softirq.c:189
local_bh_enable include/linux/bottom_half.h:32 [inline]
rcu_read_unlock_bh include/linux/rcupdate.h:688 [inline]
ip6_finish_output2+0x7bb/0xec0 net/ipv6/ip6_output.c:117
__ip6_finish_output net/ipv6/ip6_output.c:142 [inline]
__ip6_finish_output+0x2d7/0x330 net/ipv6/ip6_output.c:127
ip6_finish_output+0x41/0x160 net/ipv6/ip6_output.c:152
NF_HOOK_COND include/linux/netfilter.h:294 [inline]
ip6_output+0xf2/0x280 net/ipv6/ip6_output.c:175
dst_output include/net/dst.h:436 [inline]
ip6_local_out+0x74/0x90 net/ipv6/output_core.c:179
ip6_send_skb+0x53/0x110 net/ipv6/ip6_output.c:1795
udp_v6_send_skb.isra.0+0x3ec/0xa70 net/ipv6/udp.c:1173
udpv6_sendmsg+0x1906/0x1c20 net/ipv6/udp.c:1471
inet6_sendmsg+0x6d/0x90 net/ipv6/af_inet6.c:576
sock_sendmsg_nosec net/socket.c:637 [inline]
sock_sendmsg+0x9f/0xc0 net/socket.c:657
___sys_sendmsg+0x2b7/0x5d0 net/socket.c:2311
__sys_sendmmsg+0x123/0x350 net/socket.c:2413
__do_sys_sendmmsg net/socket.c:2442 [inline]
__se_sys_sendmmsg net/socket.c:2439 [inline]
__x64_sys_sendmmsg+0x64/0x80 net/socket.c:2439
do_syscall_64+0xcc/0x370 arch/x86/entry/common.c:290
entry_SYSCALL_64_after_hwframe+0x44/0xa9
Reported by Kernel Concurrency Sanitizer on:
CPU: 0 PID: 21817 Comm: syz-executor.2 Not tainted 5.4.0-rc6+ #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
Fixes: d518d2ed86 ("net/sched: fix race between deactivation and dequeue for NOLOCK qdisc")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Reported-by: syzbot <syzkaller@googlegroups.com>
Cc: Paolo Abeni <pabeni@redhat.com>
Cc: Davide Caratti <dcaratti@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-01-09 10:20:02 +01:00
..
2019-05-30 11:29:21 -07:00
2019-09-05 17:27:21 +02:00
2019-05-30 11:29:22 -07:00
2018-09-26 09:56:07 -07:00
2019-11-04 20:58:32 +01:00
2019-09-04 13:29:14 +02:00
2019-06-19 17:09:07 +02:00
2019-06-05 17:37:07 +02:00
2019-12-04 22:30:57 +01:00
2019-09-16 09:18:03 +02:00
2019-09-16 09:18:03 +02:00
2019-08-19 17:19:46 -07:00
2019-05-30 11:26:41 -07:00
2019-05-30 11:26:32 -07:00
2019-02-28 08:24:23 -07:00
2019-06-05 17:37:05 +02:00
2019-12-31 16:45:03 +01:00
2019-01-23 11:18:00 -08:00
2019-06-19 17:09:55 +02:00
2019-05-24 17:37:53 +02:00
2019-05-21 11:28:40 +02:00
2019-07-04 12:30:48 -07:00
2019-11-05 17:40:16 -08:00
2019-08-17 23:18:54 +02:00
2019-10-30 17:34:35 -07:00
2019-05-21 11:28:45 +02:00
2019-06-19 17:09:55 +02:00
2019-10-07 22:10:50 +02:00
2019-05-30 11:26:41 -07:00
2019-05-30 11:26:32 -07:00
2019-05-21 11:28:45 +02:00
2019-05-30 11:26:32 -07:00
2019-04-19 14:07:40 -07:00
2019-05-30 11:29:52 -07:00
2019-05-30 11:29:52 -07:00
2019-11-09 19:38:36 -08:00
2019-05-21 11:52:39 +02:00
2019-05-21 11:52:39 +02:00
2019-08-17 12:40:08 -07:00
2019-09-16 21:32:57 +02:00
2020-01-04 19:18:58 +01:00
2020-01-04 19:19:05 +01:00
2019-06-19 17:09:55 +02:00
2019-04-22 21:50:53 -07:00
2019-07-11 14:22:53 -07:00
2019-12-18 16:08:49 +01:00
2019-12-18 16:08:47 +01:00
2019-02-27 12:50:17 -08:00
2019-11-08 09:11:49 +01:00
2019-10-23 20:13:22 -07:00
2018-11-17 21:37:29 -08:00
2019-04-27 17:07:22 -04:00
2019-03-22 12:09:31 -07:00
2018-12-10 15:53:04 -08:00
2019-07-01 10:58:23 -07:00
2019-10-25 16:24:32 -07:00
2019-05-30 11:26:32 -07:00
2019-02-22 12:56:24 -08:00
2019-05-30 11:26:41 -07:00
2019-08-28 14:43:03 -07:00
2019-04-22 21:50:53 -07:00
2019-05-30 11:26:32 -07:00
2019-05-30 11:26:32 -07:00
2019-05-30 11:26:32 -07:00
2019-07-03 13:51:54 -07:00
2019-08-31 23:44:28 -07:00
2018-10-17 17:45:07 -07:00
2019-08-08 15:55:10 -07:00
2020-01-04 19:19:13 +01:00
2019-09-13 21:44:19 +02:00
2019-09-27 12:05:02 +02:00
2019-02-08 21:50:15 -08:00
2019-05-30 11:26:32 -07:00
2019-06-24 10:18:49 -07:00
2019-06-27 21:06:39 -07:00
2019-06-18 20:48:45 -04:00
2019-09-05 12:35:58 +02:00
2019-02-27 12:50:17 -08:00
2019-10-24 11:56:02 +02:00
2019-12-18 16:08:17 +01:00
2019-06-19 11:37:47 -04:00
2019-12-18 16:08:42 +01:00
2019-12-18 16:08:40 +01:00
2019-06-19 17:09:55 +02:00
2019-05-30 11:26:32 -07:00
2018-07-11 23:10:19 -07:00
2019-10-08 13:23:05 -07:00
2018-09-13 09:04:58 -07:00
2019-04-23 19:42:29 -07:00
2019-09-11 09:33:29 +02:00
2019-05-30 11:26:41 -07:00
2019-05-21 11:28:45 +02:00
2019-06-05 17:36:38 +02:00
2019-06-05 17:36:38 +02:00
2019-12-31 16:45:03 +01:00
2019-12-31 16:41:37 +01:00
2019-10-25 20:14:42 -07:00
2018-08-01 09:52:30 -07:00
2019-05-21 11:28:45 +02:00
2019-08-13 20:37:16 -07:00
2019-05-30 11:26:32 -07:00
2019-04-11 13:59:49 -07:00
2019-09-05 12:35:58 +02:00
2019-12-18 16:09:07 +01:00
2019-05-30 11:26:32 -07:00
2019-08-26 14:17:43 -07:00
2019-09-17 23:51:10 +02:00
2019-05-30 11:26:32 -07:00
2019-09-16 09:18:03 +02:00
2019-05-30 11:26:32 -07:00
2018-08-28 11:11:47 +02:00
2019-10-09 21:34:31 -07:00
2019-09-20 18:23:33 -07:00
2018-11-06 15:00:45 -08:00
2019-04-22 21:47:25 -07:00
2020-01-09 10:20:02 +01:00
2018-07-21 10:43:12 -05:00
2019-05-30 11:26:32 -07:00
2019-05-30 11:26:32 -07:00
2019-05-30 11:26:32 -07:00
2019-02-21 10:34:37 -08:00
2019-05-30 11:26:32 -07:00
2019-09-16 09:02:18 +02:00
2020-01-04 19:19:13 +01:00
2019-06-19 17:09:55 +02:00
2019-05-30 11:26:32 -07:00
2019-05-30 11:26:32 -07:00
2019-12-18 16:08:45 +01:00
2019-05-30 11:26:32 -07:00
2019-12-04 22:31:02 +01:00
2018-07-07 10:58:49 +09:00
2019-03-29 10:53:45 -07:00
2019-08-30 19:49:37 -07:00
2019-06-05 17:37:05 +02:00
2019-10-24 14:53:49 -07:00
2019-06-05 17:30:29 +02:00
2019-12-18 16:09:07 +01:00
2019-08-31 01:08:26 +02:00
2019-06-19 11:23:13 -04:00
2019-07-17 10:03:54 +02:00