• Lorenzo Bianconi's avatar
    veth: rely on rtnl_dereference() instead of on rcu_dereference() in veth_set_xdp_features() · 5ce76fe1
    Lorenzo Bianconi authored
    Fix the following kernel warning in veth_set_xdp_features routine
    relying on rtnl_dereference() instead of on rcu_dereference():
    
    =============================
    WARNING: suspicious RCU usage
    6.3.0-rc1-00144-g064d7052 #149 Not tainted
    -----------------------------
    drivers/net/veth.c:1265 suspicious rcu_dereference_check() usage!
    
    other info that might help us debug this:
    
    rcu_scheduler_active = 2, debug_locks = 1
    1 lock held by ip/135:
    (net/core/rtnetlink.c:6172)
    
    stack backtrace:
    CPU: 1 PID: 135 Comm: ip Not tainted 6.3.0-rc1-00144-g064d7052 #149
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1
    04/01/2014
    Call Trace:
     <TASK>
    dump_stack_lvl (lib/dump_stack.c:107)
    lockdep_rcu_suspicious (include/linux/context_tracking.h:152)
    veth_set_xdp_features (drivers/net/veth.c:1265 (discriminator 9))
    veth_newlink (drivers/net/veth.c:1892)
    ? veth_set_features (drivers/net/veth.c:1774)
    ? kasan_save_stack (mm/kasan/common.c:47)
    ? kasan_save_stack (mm/kasan/common.c:46)
    ? kasan_set_track (mm/kasan/common.c:52)
    ? alloc_netdev_mqs (include/linux/slab.h:737)
    ? rcu_read_lock_sched_held (kernel/rcu/update.c:125)
    ? trace_kmalloc (include/trace/events/kmem.h:54)
    ? __xdp_rxq_info_reg (net/core/xdp.c:188)
    ? alloc_netdev_mqs (net/core/dev.c:10657)
    ? rtnl_create_link (net/core/rtnetlink.c:3312)
    rtnl_newlink_create (net/core/rtnetlink.c:3440)
    ? rtnl_link_get_net_capable.constprop.0 (net/core/rtnetlink.c:3391)
    __rtnl_newlink (net/core/rtnetlink.c:3657)
    ? lock_downgrade (kernel/locking/lockdep.c:5321)
    ? rtnl_link_unregister (net/core/rtnetlink.c:3487)
    rtnl_newlink (net/core/rtnetlink.c:3671)
    rtnetlink_rcv_msg (net/core/rtnetlink.c:6174)
    ? rtnl_link_fill (net/core/rtnetlink.c:6070)
    ? mark_usage (kernel/locking/lockdep.c:4914)
    ? mark_usage (kernel/locking/lockdep.c:4914)
    netlink_rcv_skb (net/netlink/af_netlink.c:2574)
    ? rtnl_link_fill (net/core/rtnetlink.c:6070)
    ? netlink_ack (net/netlink/af_netlink.c:2551)
    ? lock_acquire (kernel/locking/lockdep.c:467)
    ? net_generic (include/linux/rcupdate.h:805)
    ? netlink_deliver_tap (include/linux/rcupdate.h:805)
    netlink_unicast (net/netlink/af_netlink.c:1340)
    ? netlink_attachskb (net/netlink/af_netlink.c:1350)
    netlink_sendmsg (net/netlink/af_netlink.c:1942)
    ? netlink_unicast (net/netlink/af_netlink.c:1861)
    ? netlink_unicast (net/netlink/af_netlink.c:1861)
    sock_sendmsg (net/socket.c:727)
    ____sys_sendmsg (net/socket.c:2501)
    ? kernel_sendmsg (net/socket.c:2448)
    ? __copy_msghdr (net/socket.c:2428)
    ___sys_sendmsg (net/socket.c:2557)
    ? mark_usage (kernel/locking/lockdep.c:4914)
    ? do_recvmmsg (net/socket.c:2544)
    ? lock_acquire (kernel/locking/lockdep.c:467)
    ? find_held_lock (kernel/locking/lockdep.c:5159)
    ? __lock_release (kernel/locking/lockdep.c:5345)
    ? __might_fault (mm/memory.c:5625)
    ? lock_downgrade (kernel/locking/lockdep.c:5321)
    ? __fget_light (include/linux/atomic/atomic-arch-fallback.h:227)
    __sys_sendmsg (include/linux/file.h:31)
    ? __sys_sendmsg_sock (net/socket.c:2572)
    ? rseq_get_rseq_cs (kernel/rseq.c:275)
    ? lockdep_hardirqs_on_prepare.part.0 (kernel/locking/lockdep.c:4263)
    do_syscall_64 (arch/x86/entry/common.c:50)
    entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:120)
    RIP: 0033:0x7f0d1aadeb17
    Code: 0f 00 f7 d8 64 89 02 48 c7 c0 ff ff ff ff eb b9 0f 1f 00 f3 0f 1e
    fa 64 8b 04 25 18 00 00 00 85 c0 75 10 b8 2e 00 00 00 0f 05 <48> 3d 00
    f0 ff ff 77 51 c3 48 83 ec 28 89 54 24 1c 48 89 74 24 10
    
    Fixes: fccca038 ("veth: take into account device reconfiguration for xdp_features flag")
    Suggested-by: default avatarEric Dumazet <edumazet@google.com>
    Reported-by: default avatarMatthieu Baerts <matthieu.baerts@tessares.net>
    Link: https://lore.kernel.org/netdev/cover.1678364612.git.lorenzo@kernel.org/T/#me4c9d8e985ec7ebee981cfdb5bc5ec651ef4035dSigned-off-by: default avatarLorenzo Bianconi <lorenzo@kernel.org>
    Reported-by: syzbot+c3d0d9c42d59ff644ea6@syzkaller.appspotmail.com
    Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
    Tested-by: default avatarMatthieu Baerts <matthieu.baerts@tessares.net>
    Link: https://lore.kernel.org/r/dfd6a9a7d85e9113063165e1f47b466b90ad7b8a.1678748579.git.lorenzo@kernel.orgSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    5ce76fe1
veth.c 46 KB