mac80211: Fix TDLS support validation in add_station handler
We need to verify whether the command is successful before allocating the station entry to avoid extra processing. This also fixes a memory leak on the error path. Signed-off-by: Jouni Malinen <j@w1.fi> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
committed by
John W. Linville
parent
94d55d62bd
commit
e3a4cc2f07
@@ -832,6 +832,12 @@ static int ieee80211_add_station(struct wiphy *wiphy, struct net_device *dev,
|
|||||||
if (is_multicast_ether_addr(mac))
|
if (is_multicast_ether_addr(mac))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
/* Only TDLS-supporting stations can add TDLS peers */
|
||||||
|
if ((params->sta_flags_set & BIT(NL80211_STA_FLAG_TDLS_PEER)) &&
|
||||||
|
!((wiphy->flags & WIPHY_FLAG_SUPPORTS_TDLS) &&
|
||||||
|
sdata->vif.type == NL80211_IFTYPE_STATION))
|
||||||
|
return -ENOTSUPP;
|
||||||
|
|
||||||
sta = sta_info_alloc(sdata, mac, GFP_KERNEL);
|
sta = sta_info_alloc(sdata, mac, GFP_KERNEL);
|
||||||
if (!sta)
|
if (!sta)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
@@ -841,12 +847,6 @@ static int ieee80211_add_station(struct wiphy *wiphy, struct net_device *dev,
|
|||||||
|
|
||||||
sta_apply_parameters(local, sta, params);
|
sta_apply_parameters(local, sta, params);
|
||||||
|
|
||||||
/* Only TDLS-supporting stations can add TDLS peers */
|
|
||||||
if (test_sta_flag(sta, WLAN_STA_TDLS_PEER) &&
|
|
||||||
!((wiphy->flags & WIPHY_FLAG_SUPPORTS_TDLS) &&
|
|
||||||
sdata->vif.type == NL80211_IFTYPE_STATION))
|
|
||||||
return -ENOTSUPP;
|
|
||||||
|
|
||||||
rate_control_rate_init(sta);
|
rate_control_rate_init(sta);
|
||||||
|
|
||||||
layer2_update = sdata->vif.type == NL80211_IFTYPE_AP_VLAN ||
|
layer2_update = sdata->vif.type == NL80211_IFTYPE_AP_VLAN ||
|
||||||
|
Reference in New Issue
Block a user