Wei Wang
28259bac7f
ipv6: fix suspecious RCU usage warning
Syzbot reported the suspecious RCU usage in nexthop_fib6_nh() when
called from ipv6_route_seq_show(). The reason is ipv6_route_seq_start()
calls rcu_read_lock_bh(), while nexthop_fib6_nh() calls
rcu_dereference_rtnl().
The fix proposed is to add a variant of nexthop_fib6_nh() to use
rcu_dereference_bh_rtnl() for ipv6_route_seq_show().
The reported trace is as follows:
./include/net/nexthop.h:416 suspicious rcu_dereference_check() usage!
other info that might help us debug this:
rcu_scheduler_active = 2, debug_locks = 1
2 locks held by syz-executor.0/17895:
at: seq_read+0x71/0x12a0 fs/seq_file.c:169
at: seq_file_net include/linux/seq_file_net.h:19 [inline]
at: ipv6_route_seq_start+0xaf/0x300 net/ipv6/ip6_fib.c:2616
stack backtrace:
CPU: 1 PID: 17895 Comm: syz-executor.0 Not tainted 4.15.0-syzkaller #0
Call Trace:
[<ffffffff849edf9e>] __dump_stack lib/dump_stack.c:17 [inline]
[<ffffffff849edf9e>] dump_stack+0xd8/0x147 lib/dump_stack.c:53
[<ffffffff8480b7fa>] lockdep_rcu_suspicious+0x153/0x15d kernel/locking/lockdep.c:5745
[<ffffffff8459ada6>] nexthop_fib6_nh include/net/nexthop.h:416 [inline]
[<ffffffff8459ada6>] ipv6_route_native_seq_show net/ipv6/ip6_fib.c:2488 [inline]
[<ffffffff8459ada6>] ipv6_route_seq_show+0x436/0x7a0 net/ipv6/ip6_fib.c:2673
[<ffffffff81c556df>] seq_read+0xccf/0x12a0 fs/seq_file.c:276
[<ffffffff81dbc62c>] proc_reg_read+0x10c/0x1d0 fs/proc/inode.c:231
[<ffffffff81bc28ae>] do_loop_readv_writev fs/read_write.c:714 [inline]
[<ffffffff81bc28ae>] do_loop_readv_writev fs/read_write.c:701 [inline]
[<ffffffff81bc28ae>] do_iter_read+0x49e/0x660 fs/read_write.c:935
[<ffffffff81bc81ab>] vfs_readv+0xfb/0x170 fs/read_write.c:997
[<ffffffff81c88847>] kernel_readv fs/splice.c:361 [inline]
[<ffffffff81c88847>] default_file_splice_read+0x487/0x9c0 fs/splice.c:416
[<ffffffff81c86189>] do_splice_to+0x129/0x190 fs/splice.c:879
[<ffffffff81c86f66>] splice_direct_to_actor+0x256/0x890 fs/splice.c:951
[<ffffffff81c8777d>] do_splice_direct+0x1dd/0x2b0 fs/splice.c:1060
[<ffffffff81bc4747>] do_sendfile+0x597/0xce0 fs/read_write.c:1459
[<ffffffff81bca205>] SYSC_sendfile64 fs/read_write.c:1520 [inline]
[<ffffffff81bca205>] SyS_sendfile64+0x155/0x170 fs/read_write.c:1506
[<ffffffff81015fcf>] do_syscall_64+0x1ff/0x310 arch/x86/entry/common.c:305
[<ffffffff84a00076>] entry_SYSCALL_64_after_hwframe+0x42/0xb7
Fixes: f88d8ea67f ("ipv6: Plumb support for nexthop object in a fib6_info")
Reported-by: syzbot <syzkaller@googlegroups.com>
Signed-off-by: Wei Wang <weiwan@google.com>
Cc: David Ahern <dsahern@kernel.org>
Cc: Ido Schimmel <idosch@idosch.org>
Cc: Petr Machata <petrm@nvidia.com>
Cc: Eric Dumazet <edumazet@google.com>
Reviewed-by: Ido Schimmel <idosch@nvidia.com>
Reviewed-by: David Ahern <dsahern@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
2021-03-10 12:35:23 -08:00
..
2020-11-19 17:21:34 +01:00
2021-02-01 17:04:17 +01:00
2020-09-29 14:02:53 -07:00
2021-01-28 20:36:21 -08:00
2021-02-15 18:17:15 +01:00
2021-02-02 17:45:59 -08:00
2020-12-04 17:47:35 -08:00
2019-06-05 17:37:07 +02:00
2020-11-05 14:27:30 -08:00
2020-10-15 12:43:21 -07:00
2020-02-28 14:51:30 +01:00
2021-02-16 17:51:13 -08:00
2020-08-18 15:58:53 -07:00
2019-05-30 11:26:41 -07:00
2020-08-20 18:21:28 +01:00
2020-02-28 12:12:53 -08:00
2019-12-11 15:01:23 -08:00
2019-11-06 16:14:48 -08:00
2019-01-23 11:18:00 -08:00
2019-06-19 17:09:55 +02:00
2020-07-21 18:30:47 -07:00
2019-05-24 17:37:53 +02:00
2020-05-01 12:15:37 -07:00
2019-07-04 12:30:48 -07:00
2021-01-18 20:48:40 -08:00
2020-11-12 18:39:28 -08:00
2020-12-01 15:51:19 +01:00
2019-05-21 11:28:45 +02:00
2019-06-19 17:09:55 +02:00
2021-02-12 09:33:34 +01:00
2020-02-29 14:39:08 +01:00
2020-08-20 15:45:15 -04:00
2020-07-15 07:45:24 -07:00
2020-03-27 19:40:38 -07:00
2020-11-23 13:31:54 -08:00
2019-05-30 11:29:52 -07:00
2019-05-30 11:29:52 -07:00
2021-02-11 13:04:49 -08:00
2020-02-29 21:52:20 -08:00
2019-05-21 11:52:39 +02:00
2019-05-21 11:52:39 +02:00
2021-02-16 14:47:46 -08:00
2019-12-16 16:09:44 -08:00
2018-03-05 12:52:45 -05:00
2020-05-08 21:33:33 -07:00
2021-03-10 12:24:18 -08:00
2020-05-05 13:23:29 -07:00
2020-02-19 13:52:32 +01:00
2020-04-20 07:34:16 +02:00
2019-06-19 17:09:55 +02:00
2018-05-28 22:59:54 -04:00
2019-12-24 22:37:30 -08:00
2020-07-28 17:42:31 -07:00
2020-07-24 15:23:31 -07:00
2021-01-29 18:05:30 -08:00
2020-11-23 18:36:21 -05:00
2021-01-21 13:33:45 +01:00
2021-01-21 13:33:45 +01:00
2019-12-09 10:36:44 -08:00
2019-11-05 18:20:55 -08:00
2021-02-12 16:31:46 -08:00
2019-03-22 12:09:31 -07:00
2021-01-29 20:39:14 -08:00
2021-02-04 18:37:57 -08:00
2020-06-22 21:12:44 -07:00
2019-10-25 16:24:32 -07:00
2021-02-23 11:29:52 -08:00
2020-11-06 11:01:01 +01:00
2019-05-30 11:26:41 -07:00
2020-05-11 13:18:54 -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
2020-03-30 13:45:04 -07:00
2021-01-27 18:18:15 -08:00
2021-01-29 22:48:30 -08:00
2020-12-14 18:38:58 -08:00
2020-12-12 15:08:54 -08:00
2020-11-23 16:32:33 -08:00
2020-08-26 07:33:19 -07:00
2019-09-27 12:05:02 +02:00
2019-02-08 21:50:15 -08:00
2020-06-20 17:47:53 -07:00
2021-02-08 16:47:03 -08:00
2021-01-26 18:39:45 -08:00
2019-06-18 20:48:45 -04:00
2021-02-08 16:47:03 -08:00
2020-11-19 19:08:46 -08:00
2021-02-04 18:37:57 -08:00
2020-11-10 17:56:54 -08:00
2020-11-19 10:49:50 -08:00
2020-08-31 12:26:39 -07:00
2020-11-19 10:49:50 -08:00
2020-02-05 14:28:09 +01:00
2018-03-27 09:51:23 +02:00
2019-06-19 17:09:55 +02:00
2020-06-20 17:22:22 -07:00
2018-07-11 23:10:19 -07:00
2021-01-26 17:53:45 -08:00
2019-10-08 13:23:05 -07:00
2018-09-13 09:04:58 -07:00
2020-03-29 22:30:57 -07:00
2021-01-26 11:55:50 +01:00
2019-05-30 11:26:41 -07:00
2020-03-26 20:17:36 -07:00
2020-03-02 11:16:27 -08:00
2020-02-29 21:52:20 -08:00
2020-02-28 12:08:37 -08:00
2020-05-29 21:20:20 -07:00
2020-12-09 19:02:15 -08:00
2019-12-09 10:36:44 -08:00
2020-08-24 06:40:07 -07:00
2020-11-13 14:24:39 -08:00
2018-05-28 22:59:54 -04:00
2021-02-11 14:10:07 -08:00
2018-08-01 09:52:30 -07:00
2019-05-21 11:28:45 +02:00
2020-11-16 08:08:54 -08:00
2019-11-12 08:18:03 -08:00
2019-04-11 13:59:49 -07:00
2021-03-10 12:35:23 -08:00
2020-11-14 02:29:00 +01:00
2020-03-04 13:25:55 -08:00
2019-05-30 11:26:32 -07:00
2021-01-22 20:41:29 -08:00
2020-11-07 10:41:15 -08: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
2020-12-28 14:52:54 -08:00
2020-07-31 09:24:23 +02:00
2020-08-24 14:35:00 -07:00
2018-05-16 07:23:35 +02:00
2020-11-23 18:36:21 -05:00
2020-06-23 20:27:09 -07:00
2018-03-13 18:37:02 +02:00
2018-11-06 15:00:45 -08:00
2019-04-22 21:47:25 -07:00
2021-02-02 14:21:31 -08:00
2020-07-13 11:03:44 -07:00
2019-05-30 11:26:32 -07:00
2019-05-30 11:26:32 -07:00
2020-06-04 15:39:32 -07:00
2018-04-11 10:33:46 -04:00
2020-09-28 15:19:03 -07:00
2019-10-05 16:29:00 -07:00
2020-02-29 21:52:19 -08:00
2021-02-16 13:14:06 -08:00
2018-03-01 21:21:36 -05:00
2019-06-19 17:09:55 +02:00
2021-02-16 14:47:46 -08:00
2019-05-30 11:26:32 -07:00
2021-02-16 13:14:06 -08:00
2019-05-30 11:26:32 -07:00
2018-05-08 00:02:41 -04:00
2019-10-04 14:07:07 -07:00
2020-11-27 18:25:27 -08:00
2020-06-23 20:10:15 -07:00
2020-06-18 20:46:23 -07:00
2021-02-04 18:37:14 -08:00
2021-02-04 18:37:57 -08:00
2019-11-14 18:12:17 -08:00
2020-09-14 16:49:39 -07:00
2019-12-09 10:28:43 -08:00
2019-11-16 12:39:10 -08:00
2020-11-17 22:07:40 +01:00
2020-12-18 16:10:21 +01:00
2021-02-04 01:00:07 +01:00
2020-10-05 18:40:01 -07:00
2020-12-18 16:10:21 +01:00