Message ID | 20190108173242.74244-1-willemdebruijn.kernel@gmail.com |
---|---|
State | Accepted |
Delegated to: | David Miller |
Headers | show |
Series | [net] bonding: update nest level on unlink | expand |
On Tue, Jan 8, 2019 at 12:32 PM Willem de Bruijn <willemdebruijn.kernel@gmail.com> wrote: > > From: Willem de Bruijn <willemb@google.com> > > 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: 7e2556e40026 ("bonding: avoid lockdep confusion in bond_get_stats()") > Reported-by: syzbot <syzkaller@googlegroups.com> > Signed-off-by: Willem de Bruijn <willemb@google.com> > --- > drivers/net/bonding/bond_main.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c > index a9d597f28023..485462d3087f 100644 > --- a/drivers/net/bonding/bond_main.c > +++ b/drivers/net/bonding/bond_main.c > @@ -1963,6 +1963,9 @@ static int __bond_release_one(struct net_device *bond_dev, > if (!bond_has_slaves(bond)) { > bond_set_carrier(bond); > eth_hw_addr_random(bond_dev); > + bond->nest_level = SINGLE_DEPTH_NESTING; > + } else { > + bond->nest_level = dev_get_nest_level(bond_dev) + 1; > } > > unblock_netpoll_tx(); > -- > 2.20.1.97.g81188d93c3-goog >
Willem, this was an empty reply to your own patch. Were you trying to say something that I should know?
On Tue, Jan 8, 2019 at 11:00 PM David Miller <davem@davemloft.net> wrote: > > > Willem, this was an empty reply to your own patch. > > Were you trying to say something that I should know? I corrected a typo in Eric's email address. Sorry for the confusing email, David. Should have added a short comment (and Eric probably saw the original patch anyway).
From: Willem de Bruijn <willemdebruijn.kernel@gmail.com> Date: Tue, 8 Jan 2019 12:32:42 -0500 > From: Willem de Bruijn <willemb@google.com> > > 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 .. ... > Fixes: 7e2556e40026 ("bonding: avoid lockdep confusion in bond_get_stats()") > Reported-by: syzbot <syzkaller@googlegroups.com> > Signed-off-by: Willem de Bruijn <willemb@google.com> Applied, and queued up for -stable.
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index a9d597f28023..485462d3087f 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c @@ -1963,6 +1963,9 @@ static int __bond_release_one(struct net_device *bond_dev, if (!bond_has_slaves(bond)) { bond_set_carrier(bond); eth_hw_addr_random(bond_dev); + bond->nest_level = SINGLE_DEPTH_NESTING; + } else { + bond->nest_level = dev_get_nest_level(bond_dev) + 1; } unblock_netpoll_tx();