aboutsummaryrefslogtreecommitdiffstats
path: root/net/wireless/mlme.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/wireless/mlme.c')
-rw-r--r--net/wireless/mlme.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/net/wireless/mlme.c b/net/wireless/mlme.c
index 1b2ca1fea7a1..8e4ce2fdf862 100644
--- a/net/wireless/mlme.c
+++ b/net/wireless/mlme.c
@@ -328,7 +328,8 @@ int __cfg80211_mlme_auth(struct cfg80211_registered_device *rdev,
328 enum nl80211_auth_type auth_type, 328 enum nl80211_auth_type auth_type,
329 const u8 *bssid, 329 const u8 *bssid,
330 const u8 *ssid, int ssid_len, 330 const u8 *ssid, int ssid_len,
331 const u8 *ie, int ie_len) 331 const u8 *ie, int ie_len,
332 const u8 *key, int key_len, int key_idx)
332{ 333{
333 struct wireless_dev *wdev = dev->ieee80211_ptr; 334 struct wireless_dev *wdev = dev->ieee80211_ptr;
334 struct cfg80211_auth_request req; 335 struct cfg80211_auth_request req;
@@ -337,6 +338,10 @@ int __cfg80211_mlme_auth(struct cfg80211_registered_device *rdev,
337 338
338 ASSERT_WDEV_LOCK(wdev); 339 ASSERT_WDEV_LOCK(wdev);
339 340
341 if (auth_type == NL80211_AUTHTYPE_SHARED_KEY)
342 if (!key || !key_len || key_idx < 0 || key_idx > 4)
343 return -EINVAL;
344
340 if (wdev->current_bss && 345 if (wdev->current_bss &&
341 memcmp(bssid, wdev->current_bss->pub.bssid, ETH_ALEN) == 0) 346 memcmp(bssid, wdev->current_bss->pub.bssid, ETH_ALEN) == 0)
342 return -EALREADY; 347 return -EALREADY;
@@ -359,6 +364,9 @@ int __cfg80211_mlme_auth(struct cfg80211_registered_device *rdev,
359 req.auth_type = auth_type; 364 req.auth_type = auth_type;
360 req.bss = cfg80211_get_bss(&rdev->wiphy, chan, bssid, ssid, ssid_len, 365 req.bss = cfg80211_get_bss(&rdev->wiphy, chan, bssid, ssid, ssid_len,
361 WLAN_CAPABILITY_ESS, WLAN_CAPABILITY_ESS); 366 WLAN_CAPABILITY_ESS, WLAN_CAPABILITY_ESS);
367 req.key = key;
368 req.key_len = key_len;
369 req.key_idx = key_idx;
362 if (!req.bss) 370 if (!req.bss)
363 return -ENOENT; 371 return -ENOENT;
364 372
@@ -396,13 +404,15 @@ int cfg80211_mlme_auth(struct cfg80211_registered_device *rdev,
396 struct net_device *dev, struct ieee80211_channel *chan, 404 struct net_device *dev, struct ieee80211_channel *chan,
397 enum nl80211_auth_type auth_type, const u8 *bssid, 405 enum nl80211_auth_type auth_type, const u8 *bssid,
398 const u8 *ssid, int ssid_len, 406 const u8 *ssid, int ssid_len,
399 const u8 *ie, int ie_len) 407 const u8 *ie, int ie_len,
408 const u8 *key, int key_len, int key_idx)
400{ 409{
401 int err; 410 int err;
402 411
403 wdev_lock(dev->ieee80211_ptr); 412 wdev_lock(dev->ieee80211_ptr);
404 err = __cfg80211_mlme_auth(rdev, dev, chan, auth_type, bssid, 413 err = __cfg80211_mlme_auth(rdev, dev, chan, auth_type, bssid,
405 ssid, ssid_len, ie, ie_len); 414 ssid, ssid_len, ie, ie_len,
415 key, key_len, key_idx);
406 wdev_unlock(dev->ieee80211_ptr); 416 wdev_unlock(dev->ieee80211_ptr);
407 417
408 return err; 418 return err;