summaryrefslogtreecommitdiffstats
path: root/net/wireless
diff options
context:
space:
mode:
Diffstat (limited to 'net/wireless')
-rw-r--r--net/wireless/nl80211.c25
1 files changed, 18 insertions, 7 deletions
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index eb4437fa0539..dc96077afe5e 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -4550,6 +4550,9 @@ static int nl80211_start_ap(struct sk_buff *skb, struct genl_info *info)
4550 4550
4551 nl80211_calculate_ap_params(&params); 4551 nl80211_calculate_ap_params(&params);
4552 4552
4553 if (info->attrs[NL80211_ATTR_EXTERNAL_AUTH_SUPPORT])
4554 params.flags |= AP_SETTINGS_EXTERNAL_AUTH_SUPPORT;
4555
4553 wdev_lock(wdev); 4556 wdev_lock(wdev);
4554 err = rdev_start_ap(rdev, dev, &params); 4557 err = rdev_start_ap(rdev, dev, &params);
4555 if (!err) { 4558 if (!err) {
@@ -13086,7 +13089,9 @@ static int nl80211_external_auth(struct sk_buff *skb, struct genl_info *info)
13086 if (!rdev->ops->external_auth) 13089 if (!rdev->ops->external_auth)
13087 return -EOPNOTSUPP; 13090 return -EOPNOTSUPP;
13088 13091
13089 if (!info->attrs[NL80211_ATTR_SSID]) 13092 if (!info->attrs[NL80211_ATTR_SSID] &&
13093 dev->ieee80211_ptr->iftype != NL80211_IFTYPE_AP &&
13094 dev->ieee80211_ptr->iftype != NL80211_IFTYPE_P2P_GO)
13090 return -EINVAL; 13095 return -EINVAL;
13091 13096
13092 if (!info->attrs[NL80211_ATTR_BSSID]) 13097 if (!info->attrs[NL80211_ATTR_BSSID])
@@ -13097,18 +13102,24 @@ static int nl80211_external_auth(struct sk_buff *skb, struct genl_info *info)
13097 13102
13098 memset(&params, 0, sizeof(params)); 13103 memset(&params, 0, sizeof(params));
13099 13104
13100 params.ssid.ssid_len = nla_len(info->attrs[NL80211_ATTR_SSID]); 13105 if (info->attrs[NL80211_ATTR_SSID]) {
13101 if (params.ssid.ssid_len == 0 || 13106 params.ssid.ssid_len = nla_len(info->attrs[NL80211_ATTR_SSID]);
13102 params.ssid.ssid_len > IEEE80211_MAX_SSID_LEN) 13107 if (params.ssid.ssid_len == 0 ||
13103 return -EINVAL; 13108 params.ssid.ssid_len > IEEE80211_MAX_SSID_LEN)
13104 memcpy(params.ssid.ssid, nla_data(info->attrs[NL80211_ATTR_SSID]), 13109 return -EINVAL;
13105 params.ssid.ssid_len); 13110 memcpy(params.ssid.ssid,
13111 nla_data(info->attrs[NL80211_ATTR_SSID]),
13112 params.ssid.ssid_len);
13113 }
13106 13114
13107 memcpy(params.bssid, nla_data(info->attrs[NL80211_ATTR_BSSID]), 13115 memcpy(params.bssid, nla_data(info->attrs[NL80211_ATTR_BSSID]),
13108 ETH_ALEN); 13116 ETH_ALEN);
13109 13117
13110 params.status = nla_get_u16(info->attrs[NL80211_ATTR_STATUS_CODE]); 13118 params.status = nla_get_u16(info->attrs[NL80211_ATTR_STATUS_CODE]);
13111 13119
13120 if (info->attrs[NL80211_ATTR_PMKID])
13121 params.pmkid = nla_data(info->attrs[NL80211_ATTR_PMKID]);
13122
13112 return rdev_external_auth(rdev, dev, &params); 13123 return rdev_external_auth(rdev, dev, &params);
13113} 13124}
13114 13125