|
@@ -3972,10 +3972,10 @@ static int nl80211_new_station(struct sk_buff *skb, struct genl_info *info)
|
|
|
params.listen_interval =
|
|
|
nla_get_u16(info->attrs[NL80211_ATTR_STA_LISTEN_INTERVAL]);
|
|
|
|
|
|
- if (info->attrs[NL80211_ATTR_STA_AID])
|
|
|
- params.aid = nla_get_u16(info->attrs[NL80211_ATTR_STA_AID]);
|
|
|
- else
|
|
|
+ if (info->attrs[NL80211_ATTR_PEER_AID])
|
|
|
params.aid = nla_get_u16(info->attrs[NL80211_ATTR_PEER_AID]);
|
|
|
+ else
|
|
|
+ params.aid = nla_get_u16(info->attrs[NL80211_ATTR_STA_AID]);
|
|
|
if (!params.aid || params.aid > IEEE80211_MAX_AID)
|
|
|
return -EINVAL;
|
|
|
|
|
@@ -4027,7 +4027,8 @@ static int nl80211_new_station(struct sk_buff *skb, struct genl_info *info)
|
|
|
params.sta_modify_mask &= ~STATION_PARAM_APPLY_UAPSD;
|
|
|
|
|
|
/* TDLS peers cannot be added */
|
|
|
- if (params.sta_flags_set & BIT(NL80211_STA_FLAG_TDLS_PEER))
|
|
|
+ if ((params.sta_flags_set & BIT(NL80211_STA_FLAG_TDLS_PEER)) ||
|
|
|
+ info->attrs[NL80211_ATTR_PEER_AID])
|
|
|
return -EINVAL;
|
|
|
/* but don't bother the driver with it */
|
|
|
params.sta_flags_mask &= ~BIT(NL80211_STA_FLAG_TDLS_PEER);
|
|
@@ -4053,7 +4054,8 @@ static int nl80211_new_station(struct sk_buff *skb, struct genl_info *info)
|
|
|
if (params.sta_flags_mask & BIT(NL80211_STA_FLAG_ASSOCIATED))
|
|
|
return -EINVAL;
|
|
|
/* TDLS peers cannot be added */
|
|
|
- if (params.sta_flags_set & BIT(NL80211_STA_FLAG_TDLS_PEER))
|
|
|
+ if ((params.sta_flags_set & BIT(NL80211_STA_FLAG_TDLS_PEER)) ||
|
|
|
+ info->attrs[NL80211_ATTR_PEER_AID])
|
|
|
return -EINVAL;
|
|
|
break;
|
|
|
case NL80211_IFTYPE_STATION:
|