rndis_wlan: do not try to restore wpa keys using add_wep_key()
authorJussi Kivilinna <jussi.kivilinna@mbnet.fi>
Fri, 22 May 2009 14:40:34 +0000 (17:40 +0300)
committerJohn W. Linville <linville@tuxdriver.com>
Fri, 22 May 2009 18:06:04 +0000 (14:06 -0400)
set_infra_mode() tried to restore wpa keys using add_wep_key(). This never
worked so prevent driver from trying.

Signed-off-by: Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/rndis_wlan.c

index 98f6ff7..c254fdf 100644 (file)
@@ -405,6 +405,7 @@ struct rndis_wext_private {
        int  encr_tx_key_index;
        char encr_keys[4][32];
        int  encr_key_len[4];
+       char encr_key_wpa[4];
        int  wpa_version;
        int  wpa_keymgmt;
        int  wpa_authalg;
@@ -956,7 +957,7 @@ static int set_infra_mode(struct usbnet *usbdev, int mode)
        if (priv->wpa_keymgmt == 0 ||
                priv->wpa_keymgmt == IW_AUTH_KEY_MGMT_802_1X) {
                for (i = 0; i < 4; i++) {
-                       if (priv->encr_key_len[i] > 0)
+                       if (priv->encr_key_len[i] > 0 && !priv->encr_key_wpa[i])
                                add_wep_key(usbdev, priv->encr_keys[i],
                                                priv->encr_key_len[i], i);
                }
@@ -1027,6 +1028,7 @@ static int add_wep_key(struct usbnet *usbdev, char *key, int key_len, int index)
        }
 
        priv->encr_key_len[index] = key_len;
+       priv->encr_key_wpa[index] = 0;
        memcpy(&priv->encr_keys[index], key, key_len);
 
        return 0;
@@ -1092,7 +1094,8 @@ static int add_wpa_key(struct usbnet *usbdev, const u8 *key, int key_len,
                return ret;
 
        priv->encr_key_len[index] = key_len;
-       memcpy(&priv->encr_keys[index], ndis_key.material, key_len);
+       priv->encr_key_wpa[index] = 1;
+
        if (flags & ndis_80211_addkey_transmit_key)
                priv->encr_tx_key_index = index;
 
@@ -1112,6 +1115,7 @@ static int remove_key(struct usbnet *usbdev, int index, u8 bssid[ETH_ALEN])
                return 0;
 
        priv->encr_key_len[index] = 0;
+       priv->encr_key_wpa[index] = 0;
        memset(&priv->encr_keys[index], 0, sizeof(priv->encr_keys[index]));
 
        if (priv->wpa_cipher_pair == IW_AUTH_CIPHER_TKIP ||