cfg80211: fix disabling WPA via wext (SIOCSIWAUTH)
authorGábor Stefanik <netrolller.3d@gmail.com>
Sun, 12 Jul 2009 00:03:48 +0000 (02:03 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Fri, 24 Jul 2009 19:05:12 +0000 (15:05 -0400)
cfg80211_set_wpa_version completely missed the use case when disabling
WPA, considering IW_AUTH_WPA_VERSION_DISABLED an invalid argument. This
caused weird error messages in wpa_supplicant.

Signed-off-by: Gábor Stefanik <netrolller.3d@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
net/wireless/wext-compat.c

index aa80c0c4efd40130af5a3e5ff66ca40829a555ca..e6731bf550626e29e90a52bf592fc34bd1f793e0 100644 (file)
@@ -880,9 +880,19 @@ static int cfg80211_set_wpa_version(struct wireless_dev *wdev, u32 wpa_versions)
        wdev->wext.connect.crypto.wpa_versions = 0;
 
        if (wpa_versions & ~(IW_AUTH_WPA_VERSION_WPA |
-                            IW_AUTH_WPA_VERSION_WPA2))
+                            IW_AUTH_WPA_VERSION_WPA2|
+                            IW_AUTH_WPA_VERSION_DISABLED))
                return -EINVAL;
 
+       if ((wpa_versions & IW_AUTH_WPA_VERSION_DISABLED) &&
+           (wpa_versions & (IW_AUTH_WPA_VERSION_WPA|
+                            IW_AUTH_WPA_VERSION_WPA2)))
+               return -EINVAL;
+
+       if (wpa_versions & IW_AUTH_WPA_VERSION_DISABLED)
+               wdev->wext.connect.crypto.wpa_versions &=
+                       ~(NL80211_WPA_VERSION_1|NL80211_WPA_VERSION_2);
+
        if (wpa_versions & IW_AUTH_WPA_VERSION_WPA)
                wdev->wext.connect.crypto.wpa_versions |=
                        NL80211_WPA_VERSION_1;