* [PATCH net] bonding: update nest level on unlink
@ 2019-01-08 17:32 Willem de Bruijn
2019-01-08 17:33 ` Willem de Bruijn
2019-01-10 21:50 ` David Miller
0 siblings, 2 replies; 5+ messages in thread
From: Willem de Bruijn @ 2019-01-08 17:32 UTC (permalink / raw)
To: netdev; +Cc: davem, edumazet, j.vosburgh, vfalico, andy, Willem de Bruijn,
syzbot
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
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH net] bonding: update nest level on unlink
2019-01-08 17:32 [PATCH net] bonding: update nest level on unlink Willem de Bruijn
@ 2019-01-08 17:33 ` Willem de Bruijn
2019-01-09 4:00 ` David Miller
2019-01-10 21:50 ` David Miller
1 sibling, 1 reply; 5+ messages in thread
From: Willem de Bruijn @ 2019-01-08 17:33 UTC (permalink / raw)
To: Network Development
Cc: David Miller, Jay Vosburgh, vfalico, Andy Gospodarek,
Willem de Bruijn, syzbot, Eric Dumazet
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
>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH net] bonding: update nest level on unlink
2019-01-08 17:33 ` Willem de Bruijn
@ 2019-01-09 4:00 ` David Miller
2019-01-09 13:18 ` Willem de Bruijn
0 siblings, 1 reply; 5+ messages in thread
From: David Miller @ 2019-01-09 4:00 UTC (permalink / raw)
To: willemdebruijn.kernel
Cc: netdev, j.vosburgh, vfalico, andy, willemb, syzkaller, edumazet
Willem, this was an empty reply to your own patch.
Were you trying to say something that I should know?
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH net] bonding: update nest level on unlink
2019-01-09 4:00 ` David Miller
@ 2019-01-09 13:18 ` Willem de Bruijn
0 siblings, 0 replies; 5+ messages in thread
From: Willem de Bruijn @ 2019-01-09 13:18 UTC (permalink / raw)
To: David Miller
Cc: Network Development, Jay Vosburgh, vfalico, Andy Gospodarek,
Willem de Bruijn, syzkaller, Eric Dumazet
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).
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH net] bonding: update nest level on unlink
2019-01-08 17:32 [PATCH net] bonding: update nest level on unlink Willem de Bruijn
2019-01-08 17:33 ` Willem de Bruijn
@ 2019-01-10 21:50 ` David Miller
1 sibling, 0 replies; 5+ messages in thread
From: David Miller @ 2019-01-10 21:50 UTC (permalink / raw)
To: willemdebruijn.kernel
Cc: netdev, edumazet, j.vosburgh, vfalico, andy, willemb, syzkaller
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.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2019-01-10 21:51 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-01-08 17:32 [PATCH net] bonding: update nest level on unlink Willem de Bruijn
2019-01-08 17:33 ` Willem de Bruijn
2019-01-09 4:00 ` David Miller
2019-01-09 13:18 ` Willem de Bruijn
2019-01-10 21:50 ` David Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).