Subject: Can't set key with (GROUP_USAGE | TX_USAGE) for WPA/WPA2
         1. Remove checking in ar6k_cfg80211_connect(), it already checks for 
None AUth. (NONE_AUTH == arPriv->arAuthMode)
         2. Add checking in ar6k_cfg80211_set_default_key().  WPA/WPA2 can't 
set key with (GROUP_USAGE | TX_USAGE)

          Without this patch, wifi firmware state machine may go wrong.

Signed-off-by: Samuel Chang <[email protected]>


diff -ruN kernel-2.6.37.6-92.2/drivers/staging/ar6003/os/linux/cfg80211.c 
kernel-2.6.37.6-92.2_target_assertion_fix_patch/drivers/staging/ar6003/os/linux/cfg80211.c
--- kernel-2.6.37.6-92.2/drivers/staging/ar6003/os/linux/cfg80211.c     
2011-06-15 02:06:12.863498128 +0800
+++ 
kernel-2.6.37.6-92.2_target_assertion_fix_patch/drivers/staging/ar6003/os/linux/cfg80211.c
  2011-06-16 02:10:27.937656557 +0800
@@ -245,7 +245,6 @@
     AR_SOFTC_T     *ar     = arPriv->arSoftc;
     AR_SOFTC_STA_T *arSta  = &arPriv->arSta;
     A_STATUS status;
-    A_UINT8 keyUsage = 0;
     const unsigned char wps_oui[] = { 0x00, 0x50, 0xf2, 0x04 };
     unsigned char *ie = sme->ie;
 
@@ -375,14 +374,9 @@
         key->cipher = arPriv->arPairwiseCrypto;
         arPriv->arDefTxKeyIndex = sme->key_idx;
 
-       if (arPriv->arAuthMode & (WPA_PSK_AUTH | WPA2_PSK_AUTH))
-               keyUsage =  GROUP_USAGE;
-       else
-               keyUsage =  GROUP_USAGE | TX_USAGE;
-
         wmi_addKey_cmd(arPriv->arWmi, sme->key_idx,
                     arPriv->arPairwiseCrypto,
-                    keyUsage,
+                    GROUP_USAGE | TX_USAGE,
                     key->key_len,
                     NULL,
                     key->key, KEY_OP_INIT_VAL, NULL,
@@ -1058,15 +1052,17 @@
         return -EINVAL;
     }
 
-    arPriv->arDefTxKeyIndex = key_index;
-    key = &arPriv->keys[arPriv->arDefTxKeyIndex];
-    status = wmi_addKey_cmd(arPriv->arWmi, arPriv->arDefTxKeyIndex,
+        if (arPriv->arAuthMode < WPA_AUTH) {
+       arPriv->arDefTxKeyIndex = key_index;
+       key = &arPriv->keys[arPriv->arDefTxKeyIndex];
+       status = wmi_addKey_cmd(arPriv->arWmi, arPriv->arDefTxKeyIndex,
                             arPriv->arPairwiseCrypto, GROUP_USAGE | TX_USAGE,
                             key->key_len, key->seq, key->key, KEY_OP_INIT_VAL,
                             NULL, SYNC_BOTH_WMIFLAG);
-    if (status != A_OK) {
-        return -EIO;
-    }
+       if (status != A_OK) {
+               return -EIO;
+       }
+       }
     return 0;
 }
 
Subject: Can't set key with (GROUP_USAGE | TX_USAGE) for WPA/WPA2
         1. Remove checking in ar6k_cfg80211_connect(), it already checks for None AUth. (NONE_AUTH == arPriv->arAuthMode)
         2. Add checking in ar6k_cfg80211_set_default_key().  WPA/WPA2 can't set key with (GROUP_USAGE | TX_USAGE)

Signed-off-by: Samuel Chang <[email protected]>


diff -ruN kernel-2.6.37.6-92.2/drivers/staging/ar6003/os/linux/cfg80211.c kernel-2.6.37.6-92.2_target_assertion_fix_patch/drivers/staging/ar6003/os/linux/cfg80211.c
--- kernel-2.6.37.6-92.2/drivers/staging/ar6003/os/linux/cfg80211.c	2011-06-15 02:06:12.863498128 +0800
+++ kernel-2.6.37.6-92.2_target_assertion_fix_patch/drivers/staging/ar6003/os/linux/cfg80211.c	2011-06-16 02:10:27.937656557 +0800
@@ -245,7 +245,6 @@
     AR_SOFTC_T     *ar     = arPriv->arSoftc;
     AR_SOFTC_STA_T *arSta  = &arPriv->arSta;
     A_STATUS status;
-    A_UINT8 keyUsage = 0;
     const unsigned char wps_oui[] = { 0x00, 0x50, 0xf2, 0x04 };
     unsigned char *ie = sme->ie;
 
@@ -375,14 +374,9 @@
         key->cipher = arPriv->arPairwiseCrypto;
         arPriv->arDefTxKeyIndex = sme->key_idx;
 
-       if (arPriv->arAuthMode & (WPA_PSK_AUTH | WPA2_PSK_AUTH))
-               keyUsage =  GROUP_USAGE;
-       else
-               keyUsage =  GROUP_USAGE | TX_USAGE;
-
         wmi_addKey_cmd(arPriv->arWmi, sme->key_idx,
                     arPriv->arPairwiseCrypto,
-                    keyUsage,
+                    GROUP_USAGE | TX_USAGE,
                     key->key_len,
                     NULL,
                     key->key, KEY_OP_INIT_VAL, NULL,
@@ -1058,15 +1052,17 @@
         return -EINVAL;
     }
 
-    arPriv->arDefTxKeyIndex = key_index;
-    key = &arPriv->keys[arPriv->arDefTxKeyIndex];
-    status = wmi_addKey_cmd(arPriv->arWmi, arPriv->arDefTxKeyIndex,
+	 if (arPriv->arAuthMode < WPA_AUTH) {
+    	arPriv->arDefTxKeyIndex = key_index;
+    	key = &arPriv->keys[arPriv->arDefTxKeyIndex];
+    	status = wmi_addKey_cmd(arPriv->arWmi, arPriv->arDefTxKeyIndex,
                             arPriv->arPairwiseCrypto, GROUP_USAGE | TX_USAGE,
                             key->key_len, key->seq, key->key, KEY_OP_INIT_VAL,
                             NULL, SYNC_BOTH_WMIFLAG);
-    if (status != A_OK) {
-        return -EIO;
-    }
+    	if (status != A_OK) {
+        	return -EIO;
+    	}
+	}
     return 0;
 }
 
_______________________________________________
MeeGo-kernel mailing list
[email protected]
http://lists.meego.com/listinfo/meego-kernel

Reply via email to