aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/libertas
diff options
context:
space:
mode:
authorAndrey Yurovsky <andrey@cozybit.com>2009-06-17 21:45:34 -0400
committerJohn W. Linville <linville@tuxdriver.com>2009-07-10 15:01:54 -0400
commitce8d096dac70e92a506d2f686ae4f724f42052cf (patch)
tree6f3d933c5aff406de34b7abb1ef638c2ea99c348 /drivers/net/wireless/libertas
parent9834c079d130217c8c5ac8791428ebeb8c660538 (diff)
libertas: copy WPA keys to priv when associating
Libertas currently maintains a copy of the WPA unicast and group keys when using WPA or WPA2. This copy is checked when deciding whether or not to return to sleep in IEEE PS mode but the actual copying back to priv was omitted, which breaks IEEE PS mode with WPA/WPA2 when one issues commands that require temporarily keeping the device awake. This patch introduces the omitted copy-back of the keys so that IEEE PS functions correctly in WPA/WPA2 mode. Thanks to Dan Williams for clearing up the issue. V2: fix typo. Also, this has been tested on GSPI and SDIO with V9 firmware. Signed-off-by: Andrey Yurovsky <andrey@cozybit.com> Acked-by: Dan Williams <dcbw@redhat.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/libertas')
-rw-r--r--drivers/net/wireless/libertas/assoc.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/net/wireless/libertas/assoc.c b/drivers/net/wireless/libertas/assoc.c
index b9b374119033..fbf26499c9a9 100644
--- a/drivers/net/wireless/libertas/assoc.c
+++ b/drivers/net/wireless/libertas/assoc.c
@@ -1368,11 +1368,17 @@ static int assoc_helper_wpa_keys(struct lbs_private *priv,
1368 if (ret) 1368 if (ret)
1369 goto out; 1369 goto out;
1370 1370
1371 memcpy(&priv->wpa_unicast_key, &assoc_req->wpa_unicast_key,
1372 sizeof(struct enc_key));
1373
1371 if (test_bit(ASSOC_FLAG_WPA_MCAST_KEY, &assoc_req->flags)) { 1374 if (test_bit(ASSOC_FLAG_WPA_MCAST_KEY, &assoc_req->flags)) {
1372 clear_bit(ASSOC_FLAG_WPA_UCAST_KEY, &assoc_req->flags); 1375 clear_bit(ASSOC_FLAG_WPA_UCAST_KEY, &assoc_req->flags);
1373 1376
1374 ret = lbs_cmd_802_11_key_material(priv, CMD_ACT_SET, assoc_req); 1377 ret = lbs_cmd_802_11_key_material(priv, CMD_ACT_SET, assoc_req);
1375 assoc_req->flags = flags; 1378 assoc_req->flags = flags;
1379
1380 memcpy(&priv->wpa_mcast_key, &assoc_req->wpa_mcast_key,
1381 sizeof(struct enc_key));
1376 } 1382 }
1377 1383
1378out: 1384out: