summaryrefslogtreecommitdiff
path: root/CORE/VOSS
diff options
context:
space:
mode:
authorSrinivas Girigowda <sgirigow@qca.qualcomm.com>2014-03-12 12:44:04 -0700
committerAkash Patel <c_akashp@qca.qualcomm.com>2014-03-13 11:08:20 -0700
commit2a5f89a556833ff242f49e240ca35db75b18ee84 (patch)
treee774fda0601e2a059dcb3c0cd3c02dfa2d16aec1 /CORE/VOSS
parentce8d0dae57b83e259d35025ba1e81d88d5d6f569 (diff)
qcacld: Fix for PMF Broadcast frame IPN mismatch
The root cause of the problem is, on reception side of the group addressed frame(s) keyID field in the MMIE is never used. If the initial association uses key index of 4 for the iGTK and AP sends broadcast DEAUTH/DISASSOC with KeyID 4 and incremental value of IPN then driver correctly checks IPN and works accordingly. But if the AP does broadcast key rotation and sends KeyID of 5 with IPN less than last frame keyID=4 IPN, then driver thinks it is a replay error and drops the frame, Hence link was not disconnected. Fix for this issue is, 1. Both 4 and 5 are the valid KeyID's and hence maintain last received frame IPN per KeyID (4 or 5). 2. On initial association, zero out the negotiated iGTK keyID's IPN Change-Id: I4eeb148be55cee18ea6cb7117ab89a97161ec200 CRs-Fixed: 629266
Diffstat (limited to 'CORE/VOSS')
-rw-r--r--CORE/VOSS/src/vos_utils.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/CORE/VOSS/src/vos_utils.c b/CORE/VOSS/src/vos_utils.c
index 1e6ac83fd15b..43d93099472f 100644
--- a/CORE/VOSS/src/vos_utils.c
+++ b/CORE/VOSS/src/vos_utils.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011-2013 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2014 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -221,7 +221,7 @@ v_BOOL_t vos_is_mmie_valid(v_U8_t *igtk, v_U8_t *ipn,
{
/* Replay error */
VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
- " mmie ipn %02X %02X %02X %02X %02X %02X"
+ "Replay error mmie ipn %02X %02X %02X %02X %02X %02X"
" drvr ipn %02X %02X %02X %02X %02X %02X",
rx_ipn[0], rx_ipn[1], rx_ipn[2], rx_ipn[3], rx_ipn[4], rx_ipn[5],
ipn[0], ipn[1], ipn[2], ipn[3], ipn[4], ipn[5]);