Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e0cfa0d3 authored by Xin Long's avatar Xin Long Committed by Greg Kroah-Hartman
Browse files

team: move dev_mc_sync after master_upper_dev_link in team_port_add




[ Upstream commit 982cf3b3999d39a2eaca0a65542df33c19b5d814 ]

The same fix as in 'bonding: move dev_mc_sync after master_upper_dev_link
in bond_enslave' is needed for team driver.

The panic can be reproduced easily:

  ip link add team1 type team
  ip link set team1 up
  ip link add link team1 vlan1 type vlan id 80
  ip link set vlan1 master team1

Fixes: cb41c997 ("team: team should sync the port's uc/mc addrs when add a port")
Signed-off-by: default avatarXin Long <lucien.xin@gmail.com>
Acked-by: default avatarJiri Pirko <jiri@mellanox.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 8cba34a7
Loading
Loading
Loading
Loading
+5 −7
Original line number Diff line number Diff line
@@ -1203,11 +1203,6 @@ static int team_port_add(struct team *team, struct net_device *port_dev)
		goto err_dev_open;
	}

	netif_addr_lock_bh(dev);
	dev_uc_sync_multiple(port_dev, dev);
	dev_mc_sync_multiple(port_dev, dev);
	netif_addr_unlock_bh(dev);

	err = vlan_vids_add_by_dev(port_dev, dev);
	if (err) {
		netdev_err(dev, "Failed to add vlan ids to device %s\n",
@@ -1247,6 +1242,11 @@ static int team_port_add(struct team *team, struct net_device *port_dev)
		goto err_option_port_add;
	}

	netif_addr_lock_bh(dev);
	dev_uc_sync_multiple(port_dev, dev);
	dev_mc_sync_multiple(port_dev, dev);
	netif_addr_unlock_bh(dev);

	port->index = -1;
	list_add_tail_rcu(&port->list, &team->port_list);
	team_port_enable(team, port);
@@ -1271,8 +1271,6 @@ static int team_port_add(struct team *team, struct net_device *port_dev)
	vlan_vids_del_by_dev(port_dev, dev);

err_vids_add:
	dev_uc_unsync(port_dev, dev);
	dev_mc_unsync(port_dev, dev);
	dev_close(port_dev);

err_dev_open: