Commit dde0b1d5 authored by Jiri Pirko's avatar Jiri Pirko Committed by Greg Kroah-Hartman

team: don't traverse port list using rcu in team_set_mac_address

[ Upstream commit 9215f437 ]

Currently the list is traversed using rcu variant. That is not correct
since dev_set_mac_address can be called which eventually calls
rtmsg_ifinfo_build_skb and there, skb allocation can sleep. So fix this
by remove the rcu usage here.

Fixes: 3d249d4c "net: introduce ethernet teaming device"
Signed-off-by: default avatarJiri Pirko <jiri@resnulli.us>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 2391f6b4
...@@ -1736,11 +1736,11 @@ static int team_set_mac_address(struct net_device *dev, void *p) ...@@ -1736,11 +1736,11 @@ static int team_set_mac_address(struct net_device *dev, void *p)
if (dev->type == ARPHRD_ETHER && !is_valid_ether_addr(addr->sa_data)) if (dev->type == ARPHRD_ETHER && !is_valid_ether_addr(addr->sa_data))
return -EADDRNOTAVAIL; return -EADDRNOTAVAIL;
memcpy(dev->dev_addr, addr->sa_data, dev->addr_len); memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
rcu_read_lock(); mutex_lock(&team->lock);
list_for_each_entry_rcu(port, &team->port_list, list) list_for_each_entry(port, &team->port_list, list)
if (team->ops.port_change_dev_addr) if (team->ops.port_change_dev_addr)
team->ops.port_change_dev_addr(team, port); team->ops.port_change_dev_addr(team, port);
rcu_read_unlock(); mutex_unlock(&team->lock);
return 0; return 0;
} }
......
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