diff options
Diffstat (limited to 'net/wireless/wext-sme.c')
-rw-r--r-- | net/wireless/wext-sme.c | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/net/wireless/wext-sme.c b/net/wireless/wext-sme.c index 6f75aaa7f795..c33ea9a5de78 100644 --- a/net/wireless/wext-sme.c +++ b/net/wireless/wext-sme.c | |||
@@ -10,10 +10,11 @@ | |||
10 | #include <net/cfg80211.h> | 10 | #include <net/cfg80211.h> |
11 | #include "nl80211.h" | 11 | #include "nl80211.h" |
12 | 12 | ||
13 | static int cfg80211_mgd_wext_connect(struct cfg80211_registered_device *rdev, | 13 | int cfg80211_mgd_wext_connect(struct cfg80211_registered_device *rdev, |
14 | struct wireless_dev *wdev) | 14 | struct wireless_dev *wdev) |
15 | { | 15 | { |
16 | int err; | 16 | struct cfg80211_cached_keys *ck = NULL; |
17 | int err, i; | ||
17 | 18 | ||
18 | ASSERT_RDEV_LOCK(rdev); | 19 | ASSERT_RDEV_LOCK(rdev); |
19 | ASSERT_WDEV_LOCK(wdev); | 20 | ASSERT_WDEV_LOCK(wdev); |
@@ -25,10 +26,25 @@ static int cfg80211_mgd_wext_connect(struct cfg80211_registered_device *rdev, | |||
25 | wdev->wext.connect.ie_len = wdev->wext.ie_len; | 26 | wdev->wext.connect.ie_len = wdev->wext.ie_len; |
26 | wdev->wext.connect.privacy = wdev->wext.default_key != -1; | 27 | wdev->wext.connect.privacy = wdev->wext.default_key != -1; |
27 | 28 | ||
28 | err = 0; | 29 | if (wdev->wext.keys) { |
29 | if (wdev->wext.connect.ssid_len != 0) | 30 | wdev->wext.keys->def = wdev->wext.default_key; |
30 | err = __cfg80211_connect(rdev, wdev->netdev, | 31 | wdev->wext.keys->defmgmt = wdev->wext.default_mgmt_key; |
31 | &wdev->wext.connect); | 32 | } |
33 | |||
34 | if (!wdev->wext.connect.ssid_len) | ||
35 | return 0; | ||
36 | |||
37 | if (wdev->wext.keys) { | ||
38 | ck = kmemdup(wdev->wext.keys, sizeof(*ck), GFP_KERNEL); | ||
39 | if (!ck) | ||
40 | return -ENOMEM; | ||
41 | for (i = 0; i < 6; i++) | ||
42 | ck->params[i].key = ck->data[i]; | ||
43 | } | ||
44 | err = __cfg80211_connect(rdev, wdev->netdev, | ||
45 | &wdev->wext.connect, ck); | ||
46 | if (err) | ||
47 | kfree(ck); | ||
32 | 48 | ||
33 | return err; | 49 | return err; |
34 | } | 50 | } |