diff options
| author | Srinivas Girigowda <sgirigow@qca.qualcomm.com> | 2014-03-12 12:44:04 -0700 |
|---|---|---|
| committer | Akash Patel <c_akashp@qca.qualcomm.com> | 2014-03-13 11:08:20 -0700 |
| commit | 2a5f89a556833ff242f49e240ca35db75b18ee84 (patch) | |
| tree | e774fda0601e2a059dcb3c0cd3c02dfa2d16aec1 /CORE/VOSS | |
| parent | ce8d0dae57b83e259d35025ba1e81d88d5d6f569 (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.c | 4 |
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]); |
