[PATCH] cfg80211: fix a couple of bugs with key ioctls

Johannes Berg
2009-05-12T10:45:10Z

There are a few small bugs/oversights in the key handling
code I wrote:
* SIOCSIWENCODE should default to setting key 0 if no
default key is set already and no index is given,
* key removal should not require key material,
* SIOCSIWENCODEEXT should default to changing the default
management key if no index is given.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
---
net/wireless/wext-compat.c | 14 +++++---------
1 file changed, 5 insertions(+), 9 deletions(-)

--- wireless-testing.orig/net/wireless/wext-compat.c 2009-05-12 12:38:41.000000000 +0200
+++ wireless-testing/net/wireless/wext-compat.c 2009-05-12 12:38:59.000000000 +0200
@@ -557,7 +557,7 @@ int cfg80211_wext_siwencode(struct net_d
if (idx == 0) {
idx = wdev->wext.default_key;
if (idx < 0)
- return -EINVAL;
+ idx = 0;
} else if (idx < 1 || idx > 4)
return -EINVAL;
else
@@ -580,7 +580,7 @@ int cfg80211_wext_siwencode(struct net_d
params.cipher = WLAN_CIPHER_SUITE_WEP40;
else if (erq->length == 13)
params.cipher = WLAN_CIPHER_SUITE_WEP104;
- else
+ else if (!remove)
return -EINVAL;

return cfg80211_set_encryption(rdev, dev, NULL, remove,
@@ -640,13 +640,9 @@ int cfg80211_wext_siwencodeext(struct ne
idx = erq->flags & IW_ENCODE_INDEX;
if (cipher == WLAN_CIPHER_SUITE_AES_CMAC) {
if (idx < 4 || idx > 5) {
- /*
- * XXX: Only wpa_supplicant ever used this
- * can we still change the ABI a little
- * so we do not need to keep track of
- * the default key?
- */
- return -EINVAL;
+ idx = wdev->wext.default_mgmt_key;
+ if (idx < 0)
+ return -EINVAL;
} else
idx--;
} else {