浏览代码

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>
Jouni Malinen 13 年之前
父节点
当前提交
e3a4cc2f07
共有 1 个文件被更改,包括 6 次插入6 次删除
  1. 6 6
      net/mac80211/cfg.c

+ 6 - 6
net/mac80211/cfg.c

@@ -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 ||