Skip to content
  • Willem de Bruijn's avatar
    bonding: update nest level on unlink · 001e465f
    Willem de Bruijn authored
    A network device stack with multiple layers of bonding devices can
    trigger a false positive lockdep warning. Adding lockdep nest levels
    fixes this. Update the level on both enslave and unlink, to avoid the
    following series of events ..
    
        ip netns add test
        ip netns exec test bash
        ip link set dev lo addr 00:11:22:33:44:55
        ip link set dev lo down
    
        ip link add dev bond1 type bond
        ip link add dev bond2 type bond
    
        ip link set dev lo master bond1
        ip link set dev bond1 master bond2
    
        ip link set dev bond1 nomaster
        ip link set dev bond2 master bond1
    
    .. from still generating a splat:
    
        [  193.652127] ======================================================
        [  193.658231] WARNING: possible circular locking dependency detected
        [  193.664350] 4.20.0 #8 Not tainted
        [  193.668310] ------------------------------------------------------
        [  193.674417] ip/15577 is trying to acquire lock:
        [  193.678897] 00000000a40e3b69 (&(&bond->stats_lock)->rlock#3/3){+.+.}, at: bond_get_stats+0x58/0x290
        [  193.687851]
        	       but task is already holding lock:
        [  193.693625] 00000000807b9d9f (&(&bond->stats_lock)->rlock#2/2){+.+.}, at: bond_get_stats+0x58/0x290
    
        [..]
    
        [  193.851092]        lock_acquire+0xa7/0x190
        [  193.855138]        _raw_spin_lock_nested+0x2d/0x40
        [  193.859878]        bond_get_stats+0x58/0x290
        [  193.864093]        dev_get_stats+0x5a/0xc0
        [  193.868140]        bond_get_stats+0x105/0x290
        [  193.872444]        dev_get_stats+0x5a/0xc0
        [  193.876493]        rtnl_fill_stats+0x40/0x130
        [  193.880797]        rtnl_fill_ifinfo+0x6c5/0xdc0
        [  193.885271]        rtmsg_ifinfo_build_skb+0x86/0xe0
        [  193.890091]        rtnetlink_event+0x5b/0xa0
        [  193.894320]        raw_notifier_call_chain+0x43/0x60
        [  193.899225]        netdev_change_features+0x50/0xa0
        [  193.904044]        bond_compute_features.isra.46+0x1ab/0x270
        [  193.909640]        bond_enslave+0x141d/0x15b0
        [  193.913946]        do_set_master+0x89/0xa0
        [  193.918016]        do_setlink+0x37c/0xda0
        [  193.921980]        __rtnl_newlink+0x499/0x890
        [  193.926281]        rtnl_newlink+0x48/0x70
        [  193.930238]        rtnetlink_rcv_msg+0x171/0x4b0
        [  193.934801]        netlink_rcv_skb+0xd1/0x110
        [  193.939103]        rtnetlink_rcv+0x15/0x20
        [  193.943151]        netlink_unicast+0x3b5/0x520
        [  193.947544]        netlink_sendmsg+0x2fd/0x3f0
        [  193.951942]        sock_sendmsg+0x38/0x50
        [  193.955899]        ___sys_sendmsg+0x2ba/0x2d0
        [  193.960205]        __x64_sys_sendmsg+0xad/0x100
        [  193.964687]        do_syscall_64+0x5a/0x460
        [  193.968823]        entry_SYSCALL_64_after_hwframe+0x49/0xbe
    
    Fixes: 7e2556e4
    
     ("bonding: avoid lockdep confusion in bond_get_stats()")
    Reported-by: default avatarsyzbot <syzkaller@googlegroups.com>
    Signed-off-by: default avatarWillem de Bruijn <willemb@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    001e465f