• F
    fib: fib_dump_info can no longer use __in_dev_get_rtnl · 25dd169a
    Florian Westphal 提交于
    syzbot reported yet another regression added with DOIT_UNLOCKED.
    When nexthop is marked as dead, fib_dump_info uses __in_dev_get_rtnl():
    
    ./include/linux/inetdevice.h:230 suspicious rcu_dereference_protected() usage!
    rcu_scheduler_active = 2, debug_locks = 1
    1 lock held by syz-executor2/23859:
     #0:  (rcu_read_lock){....}, at: [<ffffffff840283f0>]
    inet_rtm_getroute+0xaa0/0x2d70 net/ipv4/route.c:2738
    [..]
      lockdep_rcu_suspicious+0x123/0x170 kernel/locking/lockdep.c:4665
      __in_dev_get_rtnl include/linux/inetdevice.h:230 [inline]
      fib_dump_info+0x1136/0x13d0 net/ipv4/fib_semantics.c:1377
      inet_rtm_getroute+0xf97/0x2d70 net/ipv4/route.c:2785
    ..
    
    This isn't safe anymore, callers either hold RTNL mutex or rcu read lock,
    so these spots must use rcu_dereference_rtnl() or plain rcu_derefence()
    (plus unconditional rcu read lock).
    
    This does the latter.
    
    Fixes: 394f51ab ("ipv4: route: set ipv4 RTM_GETROUTE to not use rtnl")
    Reported-by: Nsyzbot <syzkaller@googlegroups.com>
    Signed-off-by: NFlorian Westphal <fw@strlen.de>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    25dd169a
fib_semantics.c 42.2 KB