Commit 3d1cc7cd authored by Johannes Berg's avatar Johannes Berg

wifi: nl80211: hold wdev mutex for station APIs

Since this will need to refer - at least in part - to the link
stations of an MLD, hold the wdev mutex for driver convenience.
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 4e2f3d67
...@@ -6976,7 +6976,9 @@ static int nl80211_set_station(struct sk_buff *skb, struct genl_info *info) ...@@ -6976,7 +6976,9 @@ static int nl80211_set_station(struct sk_buff *skb, struct genl_info *info)
} }
/* driver will call cfg80211_check_station_change() */ /* driver will call cfg80211_check_station_change() */
wdev_lock(dev->ieee80211_ptr);
err = rdev_change_station(rdev, dev, mac_addr, &params); err = rdev_change_station(rdev, dev, mac_addr, &params);
wdev_unlock(dev->ieee80211_ptr);
out_put_vlan: out_put_vlan:
dev_put(params.vlan); dev_put(params.vlan);
...@@ -7232,7 +7234,9 @@ static int nl80211_new_station(struct sk_buff *skb, struct genl_info *info) ...@@ -7232,7 +7234,9 @@ static int nl80211_new_station(struct sk_buff *skb, struct genl_info *info)
/* be aware of params.vlan when changing code here */ /* be aware of params.vlan when changing code here */
wdev_lock(dev->ieee80211_ptr);
err = rdev_add_station(rdev, dev, mac_addr, &params); err = rdev_add_station(rdev, dev, mac_addr, &params);
wdev_unlock(dev->ieee80211_ptr);
dev_put(params.vlan); dev_put(params.vlan);
return err; return err;
...@@ -7243,6 +7247,7 @@ static int nl80211_del_station(struct sk_buff *skb, struct genl_info *info) ...@@ -7243,6 +7247,7 @@ static int nl80211_del_station(struct sk_buff *skb, struct genl_info *info)
struct cfg80211_registered_device *rdev = info->user_ptr[0]; struct cfg80211_registered_device *rdev = info->user_ptr[0];
struct net_device *dev = info->user_ptr[1]; struct net_device *dev = info->user_ptr[1];
struct station_del_parameters params; struct station_del_parameters params;
int ret;
memset(&params, 0, sizeof(params)); memset(&params, 0, sizeof(params));
...@@ -7290,7 +7295,11 @@ static int nl80211_del_station(struct sk_buff *skb, struct genl_info *info) ...@@ -7290,7 +7295,11 @@ static int nl80211_del_station(struct sk_buff *skb, struct genl_info *info)
params.reason_code = WLAN_REASON_PREV_AUTH_NOT_VALID; params.reason_code = WLAN_REASON_PREV_AUTH_NOT_VALID;
} }
return rdev_del_station(rdev, dev, &params); wdev_lock(dev->ieee80211_ptr);
ret = rdev_del_station(rdev, dev, &params);
wdev_unlock(dev->ieee80211_ptr);
return ret;
} }
static int nl80211_send_mpath(struct sk_buff *msg, u32 portid, u32 seq, static int nl80211_send_mpath(struct sk_buff *msg, u32 portid, u32 seq,
......
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