Search Linux Wireless

[PATCH] libertas: Fix re-enabling IEEE PS with WPA/WPA2

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



With IEEE PS enabled, the driver will temporarily take the device out of
PS mode to issue commands and then re-enable PS once the commands have
completed.  With WPA or WPA2 security, the driver fails to re-enable PS
mode because of a check for key lengths that are always zero.

This patch removes the key lengths check (the local copy of the keys is
not maintained) and fixes IEEE PS mode with WPA or WPA2 security.
Tested on GSPI and SDIO interfaces with V9 firmware.

Signed-off-by: Andrey Yurovsky <andrey@xxxxxxxxxxx>
---
 drivers/net/wireless/libertas/cmd.c |   29 +++++++----------------------
 1 files changed, 7 insertions(+), 22 deletions(-)

diff --git a/drivers/net/wireless/libertas/cmd.c b/drivers/net/wireless/libertas/cmd.c
index 01db705..5825396 100644
--- a/drivers/net/wireless/libertas/cmd.c
+++ b/drivers/net/wireless/libertas/cmd.c
@@ -1782,32 +1782,17 @@ int lbs_execute_next_command(struct lbs_private *priv)
 		lbs_deb_host("EXEC_NEXT_CMD: sending command 0x%04x\n",
 			    le16_to_cpu(cmd->command));
 		lbs_submit_command(priv, cmdnode);
-	} else {
+	} else if ((priv->psmode != LBS802_11POWERMODECAM) &&
+		   (priv->psstate == PS_STATE_FULL_POWER) &&
+		   ((priv->connect_status == LBS_CONNECTED) ||
+		   (priv->mesh_connect_status == LBS_CONNECTED))) {
 		/*
 		 * check if in power save mode, if yes, put the device back
 		 * to PS mode
 		 */
-		if ((priv->psmode != LBS802_11POWERMODECAM) &&
-		    (priv->psstate == PS_STATE_FULL_POWER) &&
-		    ((priv->connect_status == LBS_CONNECTED) ||
-		    (priv->mesh_connect_status == LBS_CONNECTED))) {
-			if (priv->secinfo.WPAenabled ||
-			    priv->secinfo.WPA2enabled) {
-				/* check for valid WPA group keys */
-				if (priv->wpa_mcast_key.len ||
-				    priv->wpa_unicast_key.len) {
-					lbs_deb_host(
-					       "EXEC_NEXT_CMD: WPA enabled and GTK_SET"
-					       " go back to PS_SLEEP");
-					lbs_ps_sleep(priv, 0);
-				}
-			} else {
-				lbs_deb_host(
-				       "EXEC_NEXT_CMD: cmdpendingq empty, "
-				       "go back to PS_SLEEP");
-				lbs_ps_sleep(priv, 0);
-			}
-		}
+		lbs_deb_host("EXEC_NEXT_CMD: cmdpendingq empty, "
+				"go back to PS_SLEEP");
+		lbs_ps_sleep(priv, 0);
 	}
 
 	ret = 0;
-- 
1.5.6.3

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux