Eric Dumazet
d95d6320ba
ipv6: fix data-race in fib6_info_hw_flags_set / fib6_purge_rt
Because fib6_info_hw_flags_set() is called without any synchronization,
all accesses to gi6->offload, fi->trap and fi->offload_failed
need some basic protection like READ_ONCE()/WRITE_ONCE().
BUG: KCSAN: data-race in fib6_info_hw_flags_set / fib6_purge_rt
read to 0xffff8881087d5886 of 1 bytes by task 13953 on cpu 0:
fib6_drop_pcpu_from net/ipv6/ip6_fib.c:1007 [inline]
fib6_purge_rt+0x4f/0x580 net/ipv6/ip6_fib.c:1033
fib6_del_route net/ipv6/ip6_fib.c:1983 [inline]
fib6_del+0x696/0x890 net/ipv6/ip6_fib.c:2028
__ip6_del_rt net/ipv6/route.c:3876 [inline]
ip6_del_rt+0x83/0x140 net/ipv6/route.c:3891
__ipv6_dev_ac_dec+0x2b5/0x370 net/ipv6/anycast.c:374
ipv6_dev_ac_dec net/ipv6/anycast.c:387 [inline]
__ipv6_sock_ac_close+0x141/0x200 net/ipv6/anycast.c:207
ipv6_sock_ac_close+0x79/0x90 net/ipv6/anycast.c:220
inet6_release+0x32/0x50 net/ipv6/af_inet6.c:476
__sock_release net/socket.c:650 [inline]
sock_close+0x6c/0x150 net/socket.c:1318
__fput+0x295/0x520 fs/file_table.c:280
____fput+0x11/0x20 fs/file_table.c:313
task_work_run+0x8e/0x110 kernel/task_work.c:164
tracehook_notify_resume include/linux/tracehook.h:189 [inline]
exit_to_user_mode_loop kernel/entry/common.c:175 [inline]
exit_to_user_mode_prepare+0x160/0x190 kernel/entry/common.c:207
__syscall_exit_to_user_mode_work kernel/entry/common.c:289 [inline]
syscall_exit_to_user_mode+0x20/0x40 kernel/entry/common.c:300
do_syscall_64+0x50/0xd0 arch/x86/entry/common.c:86
entry_SYSCALL_64_after_hwframe+0x44/0xae
write to 0xffff8881087d5886 of 1 bytes by task 1912 on cpu 1:
fib6_info_hw_flags_set+0x155/0x3b0 net/ipv6/route.c:6230
nsim_fib6_rt_hw_flags_set drivers/net/netdevsim/fib.c:668 [inline]
nsim_fib6_rt_add drivers/net/netdevsim/fib.c:691 [inline]
nsim_fib6_rt_insert drivers/net/netdevsim/fib.c:756 [inline]
nsim_fib6_event drivers/net/netdevsim/fib.c:853 [inline]
nsim_fib_event drivers/net/netdevsim/fib.c:886 [inline]
nsim_fib_event_work+0x284f/0x2cf0 drivers/net/netdevsim/fib.c:1477
process_one_work+0x3f6/0x960 kernel/workqueue.c:2307
worker_thread+0x616/0xa70 kernel/workqueue.c:2454
kthread+0x2c7/0x2e0 kernel/kthread.c:327
ret_from_fork+0x1f/0x30
value changed: 0x22 -> 0x2a
Reported by Kernel Concurrency Sanitizer on:
CPU: 1 PID: 1912 Comm: kworker/1:3 Not tainted 5.16.0-syzkaller #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
Workqueue: events nsim_fib_event_work
Fixes: 0c5fcf9e24 ("IPv6: Add "offload failed" indication to routes")
Fixes: bb3c4ab93e ("ipv6: Add "offload" and "trap" indications to routes")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Amit Cohen <amcohen@nvidia.com>
Cc: Ido Schimmel <idosch@nvidia.com>
Reported-by: syzbot <syzkaller@googlegroups.com>
Link: https://lore.kernel.org/r/20220216173217.3792411-2-eric.dumazet@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2022-02-17 09:48:24 -08:00
..
2021-09-28 12:59:24 +01:00
2022-01-27 00:00:20 +01:00
2021-12-06 16:05:11 -08:00
2022-02-14 13:30:37 +00:00
2020-11-25 11:20:16 -08:00
2022-01-06 17:08:35 -08:00
2021-11-18 12:00:15 +00:00
2020-07-30 16:30:55 -07:00
2021-03-04 15:26:57 -08:00
2020-11-23 18:36:21 -05:00
2021-11-16 13:16:54 +00:00
2022-01-06 11:54:20 +00:00
2021-11-14 12:20:44 +00:00
2021-12-16 07:18:35 -08:00
2020-06-20 21:33:57 -07:00
2022-01-04 12:17:35 +00:00
2020-11-23 18:36:21 -05:00
2021-11-10 16:29:58 -08:00
2021-10-14 16:50:14 -07:00
2022-01-02 12:15:13 +00:00
2022-01-20 20:18:37 -08:00
2022-02-16 20:37:47 -08:00
2022-01-09 17:00:17 -08:00
2021-02-23 11:29:52 -08:00
2021-03-18 11:19:23 -07:00
2021-12-02 11:44:56 -08:00
2021-11-26 13:45:19 -08:00
2022-01-20 11:38:17 +00:00
2020-06-01 14:57:14 -07:00
2021-12-30 12:12:12 -08:00
2022-02-08 20:49:52 -08:00
2021-06-11 14:48:50 +02:00
2021-11-24 18:57:23 -08:00
2021-10-04 12:53:35 +01:00
2021-09-28 13:13:40 +01:00
2021-04-27 14:02:06 -07:00
2022-02-14 13:30:37 +00:00
2021-06-11 14:48:50 +02:00
2021-11-01 19:57:14 -07:00
2021-04-18 22:04:16 +02:00
2021-05-31 22:12:08 -07:00
2022-01-06 17:08:35 -08:00
2020-11-09 15:34:44 -08:00
2021-12-29 12:32:56 -08:00
2021-05-21 15:02:25 -07:00
2022-02-17 09:48:24 -08:00
2020-12-08 16:22:54 -08:00
2020-10-30 12:12:52 -07:00
2021-09-28 12:59:24 +01:00
2021-12-09 07:55:42 -08:00
2022-01-05 14:36:10 -08:00
2022-01-04 12:17:35 +00:00
2022-01-12 13:56:07 -08:00
2021-11-16 19:07:54 -08:00
2021-07-21 08:14:33 -07:00
2022-01-06 17:08:35 -08:00
2021-11-16 13:16:54 +00:00
2020-07-09 12:52:37 +02:00
2020-07-24 15:41:54 -07:00
2021-11-24 17:21:42 -08:00
2022-01-06 18:07:26 -08:00
2020-07-19 18:16:41 -07:00
2020-05-06 09:40:08 +02:00
2021-07-02 11:57:01 -07:00
2021-12-09 11:51:45 -08:00
2020-04-28 11:28:36 +02:00
2020-05-06 09:40:08 +02:00
2021-06-09 09:38:52 +02:00