summaryrefslogtreecommitdiffstats
path: root/net/wireless/ibss.c
diff options
context:
space:
mode:
authorJohannes Berg2016-09-13 17:08:23 +0200
committerJohannes Berg2016-09-15 16:45:41 +0200
commitf1c1f17ac52d22227c0074b3d661d7ed692b707a (patch)
tree39a551700fae54fc01846f2e8f093c33eded483c /net/wireless/ibss.c
parentcfg80211: reduce connect key caching struct size (diff)
downloadkernel-qcow2-linux-f1c1f17ac52d22227c0074b3d661d7ed692b707a.tar.gz
kernel-qcow2-linux-f1c1f17ac52d22227c0074b3d661d7ed692b707a.tar.xz
kernel-qcow2-linux-f1c1f17ac52d22227c0074b3d661d7ed692b707a.zip
cfg80211: allow connect keys only with default (TX) key
There's no point in allowing connect keys when one of them isn't also configured as the TX key, it would just confuse drivers and probably cause them to pick something for TX. Disallow this confusing and erroneous configuration. As wpa_supplicant will always send NL80211_ATTR_KEYS, even when there are no keys inside, allow that and treat it as though the attribute isn't present at all. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/wireless/ibss.c')
-rw-r--r--net/wireless/ibss.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/net/wireless/ibss.c b/net/wireless/ibss.c
index 896cbb20b6e1..eafdfa5798ae 100644
--- a/net/wireless/ibss.c
+++ b/net/wireless/ibss.c
@@ -114,6 +114,9 @@ static int __cfg80211_join_ibss(struct cfg80211_registered_device *rdev,
}
}
+ if (WARN_ON(connkeys && connkeys->def < 0))
+ return -EINVAL;
+
if (WARN_ON(wdev->connect_keys))
kzfree(wdev->connect_keys);
wdev->connect_keys = connkeys;
@@ -289,7 +292,7 @@ int cfg80211_ibss_wext_join(struct cfg80211_registered_device *rdev,
wdev->wext.ibss.privacy = wdev->wext.default_key != -1;
- if (wdev->wext.keys) {
+ if (wdev->wext.keys && wdev->wext.keys->def != -1) {
ck = kmemdup(wdev->wext.keys, sizeof(*ck), GFP_KERNEL);
if (!ck)
return -ENOMEM;