Commit 92480b39 authored by Sabrina Dubroca's avatar Sabrina Dubroca Committed by David S. Miller

bonding: fix event handling for stacked bonds

When a bond is enslaved to another bond, bond_netdev_event() only
handles the event as if the bond is a master, and skips treating the
bond as a slave.

This leads to a refcount leak on the slave, since we don't remove the
adjacency to its master and the master holds a reference on the slave.

Reproducer:
  ip link add bondL type bond
  ip link add bondU type bond
  ip link set bondL master bondU
  ip link del bondL

No "Fixes:" tag, this code is older than git history.
Signed-off-by: default avatarSabrina Dubroca <sd@queasysnail.net>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 8ed633b9
...@@ -3213,8 +3213,12 @@ static int bond_netdev_event(struct notifier_block *this, ...@@ -3213,8 +3213,12 @@ static int bond_netdev_event(struct notifier_block *this,
return NOTIFY_DONE; return NOTIFY_DONE;
if (event_dev->flags & IFF_MASTER) { if (event_dev->flags & IFF_MASTER) {
int ret;
netdev_dbg(event_dev, "IFF_MASTER\n"); netdev_dbg(event_dev, "IFF_MASTER\n");
return bond_master_netdev_event(event, event_dev); ret = bond_master_netdev_event(event, event_dev);
if (ret != NOTIFY_DONE)
return ret;
} }
if (event_dev->flags & IFF_SLAVE) { if (event_dev->flags & IFF_SLAVE) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment