diff options
Diffstat (limited to 'net/wireless/util.c')
-rw-r--r-- | net/wireless/util.c | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/net/wireless/util.c b/net/wireless/util.c index 28f8f96801d4..4bab380a1204 100644 --- a/net/wireless/util.c +++ b/net/wireless/util.c | |||
@@ -141,9 +141,12 @@ void ieee80211_set_bitrate_flags(struct wiphy *wiphy) | |||
141 | set_mandatory_flags_band(wiphy->bands[band], band); | 141 | set_mandatory_flags_band(wiphy->bands[band], band); |
142 | } | 142 | } |
143 | 143 | ||
144 | int cfg80211_validate_key_settings(struct key_params *params, int key_idx, | 144 | int cfg80211_validate_key_settings(struct cfg80211_registered_device *rdev, |
145 | struct key_params *params, int key_idx, | ||
145 | const u8 *mac_addr) | 146 | const u8 *mac_addr) |
146 | { | 147 | { |
148 | int i; | ||
149 | |||
147 | if (key_idx > 5) | 150 | if (key_idx > 5) |
148 | return -EINVAL; | 151 | return -EINVAL; |
149 | 152 | ||
@@ -197,6 +200,12 @@ int cfg80211_validate_key_settings(struct key_params *params, int key_idx, | |||
197 | } | 200 | } |
198 | } | 201 | } |
199 | 202 | ||
203 | for (i = 0; i < rdev->wiphy.n_cipher_suites; i++) | ||
204 | if (params->cipher == rdev->wiphy.cipher_suites[i]) | ||
205 | break; | ||
206 | if (i == rdev->wiphy.n_cipher_suites) | ||
207 | return -EINVAL; | ||
208 | |||
200 | return 0; | 209 | return 0; |
201 | } | 210 | } |
202 | 211 | ||
@@ -523,3 +532,33 @@ const u8 *ieee80211_bss_get_ie(struct cfg80211_bss *bss, u8 ie) | |||
523 | return NULL; | 532 | return NULL; |
524 | } | 533 | } |
525 | EXPORT_SYMBOL(ieee80211_bss_get_ie); | 534 | EXPORT_SYMBOL(ieee80211_bss_get_ie); |
535 | |||
536 | void cfg80211_upload_connect_keys(struct wireless_dev *wdev) | ||
537 | { | ||
538 | struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); | ||
539 | struct net_device *dev = wdev->netdev; | ||
540 | int i; | ||
541 | |||
542 | if (!wdev->connect_keys) | ||
543 | return; | ||
544 | |||
545 | for (i = 0; i < 6; i++) { | ||
546 | if (!wdev->connect_keys->params[i].cipher) | ||
547 | continue; | ||
548 | if (rdev->ops->add_key(wdev->wiphy, dev, i, NULL, | ||
549 | &wdev->connect_keys->params[i])) | ||
550 | printk(KERN_ERR "%s: failed to set key %d\n", | ||
551 | dev->name, i); | ||
552 | if (wdev->connect_keys->def == i) | ||
553 | if (rdev->ops->set_default_key(wdev->wiphy, dev, i)) | ||
554 | printk(KERN_ERR "%s: failed to set defkey %d\n", | ||
555 | dev->name, i); | ||
556 | if (wdev->connect_keys->defmgmt == i) | ||
557 | if (rdev->ops->set_default_mgmt_key(wdev->wiphy, dev, i)) | ||
558 | printk(KERN_ERR "%s: failed to set mgtdef %d\n", | ||
559 | dev->name, i); | ||
560 | } | ||
561 | |||
562 | kfree(wdev->connect_keys); | ||
563 | wdev->connect_keys = NULL; | ||
564 | } | ||