[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAF=yD-L61h3obURKCwjt8K1WxjLVycgQr8dpgHLZaXCngTQE8g@mail.gmail.com>
Date: Tue, 8 Jan 2019 12:33:35 -0500
From: Willem de Bruijn <willemdebruijn.kernel@...il.com>
To: Network Development <netdev@...r.kernel.org>
Cc: David Miller <davem@...emloft.net>,
Jay Vosburgh <j.vosburgh@...il.com>, vfalico@...il.com,
Andy Gospodarek <andy@...yhouse.net>,
Willem de Bruijn <willemb@...gle.com>,
syzbot <syzkaller@...glegroups.com>,
Eric Dumazet <edumazet@...gle.com>
Subject: Re: [PATCH net] bonding: update nest level on unlink
On Tue, Jan 8, 2019 at 12:32 PM Willem de Bruijn
<willemdebruijn.kernel@...il.com> wrote:
>
> From: Willem de Bruijn <willemb@...gle.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@...glegroups.com>
> Signed-off-by: Willem de Bruijn <willemb@...gle.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
>
Powered by blists - more mailing lists