]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob - releases/4.15.17/team-move-dev_mc_sync-after-master_upper_dev_link-in-team_port_add.patch
Linux 4.14.95
[thirdparty/kernel/stable-queue.git] / releases / 4.15.17 / team-move-dev_mc_sync-after-master_upper_dev_link-in-team_port_add.patch
1 From foo@baz Tue Apr 10 23:19:36 CEST 2018
2 From: Xin Long <lucien.xin@gmail.com>
3 Date: Mon, 26 Mar 2018 01:25:06 +0800
4 Subject: team: move dev_mc_sync after master_upper_dev_link in team_port_add
5
6 From: Xin Long <lucien.xin@gmail.com>
7
8
9 [ Upstream commit 982cf3b3999d39a2eaca0a65542df33c19b5d814 ]
10
11 The same fix as in 'bonding: move dev_mc_sync after master_upper_dev_link
12 in bond_enslave' is needed for team driver.
13
14 The panic can be reproduced easily:
15
16 ip link add team1 type team
17 ip link set team1 up
18 ip link add link team1 vlan1 type vlan id 80
19 ip link set vlan1 master team1
20
21 Fixes: cb41c997d444 ("team: team should sync the port's uc/mc addrs when add a port")
22 Signed-off-by: Xin Long <lucien.xin@gmail.com>
23 Acked-by: Jiri Pirko <jiri@mellanox.com>
24 Signed-off-by: David S. Miller <davem@davemloft.net>
25 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
26 ---
27 drivers/net/team/team.c | 12 +++++-------
28 1 file changed, 5 insertions(+), 7 deletions(-)
29
30 --- a/drivers/net/team/team.c
31 +++ b/drivers/net/team/team.c
32 @@ -1197,11 +1197,6 @@ static int team_port_add(struct team *te
33 goto err_dev_open;
34 }
35
36 - netif_addr_lock_bh(dev);
37 - dev_uc_sync_multiple(port_dev, dev);
38 - dev_mc_sync_multiple(port_dev, dev);
39 - netif_addr_unlock_bh(dev);
40 -
41 err = vlan_vids_add_by_dev(port_dev, dev);
42 if (err) {
43 netdev_err(dev, "Failed to add vlan ids to device %s\n",
44 @@ -1241,6 +1236,11 @@ static int team_port_add(struct team *te
45 goto err_option_port_add;
46 }
47
48 + netif_addr_lock_bh(dev);
49 + dev_uc_sync_multiple(port_dev, dev);
50 + dev_mc_sync_multiple(port_dev, dev);
51 + netif_addr_unlock_bh(dev);
52 +
53 port->index = -1;
54 list_add_tail_rcu(&port->list, &team->port_list);
55 team_port_enable(team, port);
56 @@ -1265,8 +1265,6 @@ err_enable_netpoll:
57 vlan_vids_del_by_dev(port_dev, dev);
58
59 err_vids_add:
60 - dev_uc_unsync(port_dev, dev);
61 - dev_mc_unsync(port_dev, dev);
62 dev_close(port_dev);
63
64 err_dev_open: