From 7b1331a00c8ad5a7fe35b46ff4376d4d289ca97a Mon Sep 17 00:00:00 2001 From: Ajit Vaishya Date: Fri, 2 Jul 2021 10:38:19 -0700 Subject: qcalcd3.0: Update proper Peer before flush the fragments Currently, due to incorrect peer, flushing of fragments frame as part of add key is not happening for destined peer. So because of this reassembly of fragment frame is not discarding after rekey done. Fix this issue by updating destined peer properly before flushing. Bug: 195071560 Change-Id: I51db68949e887edf49468c61058875eeb43bcd77 CRs-Fixed: 2976643 Signed-off-by: Hsiu-Chang Chen --- core/hdd/src/wlan_hdd_cfg80211.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index de5d602fe7..64a766dc21 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -16496,6 +16496,18 @@ static int __wlan_hdd_cfg80211_add_key(struct wiphy *wiphy, qdf_mem_copy(&set_key.Key[0], params->key, params->key_len); qdf_mem_copy(&set_key.keyRsc[0], params->seq, params->seq_len); + if (!pairwise) { + /* set group key */ + hdd_debug("setting Broadcast key"); + set_key.keyDirection = eSIR_RX_ONLY; + qdf_set_macaddr_broadcast(&set_key.peerMac); + } else { + /* set pairwise key */ + hdd_debug("setting pairwise key"); + set_key.keyDirection = eSIR_TX_RX; + qdf_mem_copy(set_key.peerMac.bytes, mac_addr, QDF_MAC_ADDR_SIZE); + } + mac_handle = hdd_ctx->mac_handle; cdp_peer_flush_frags(cds_get_context(QDF_MODULE_ID_SOC), @@ -16598,17 +16610,6 @@ static int __wlan_hdd_cfg80211_add_key(struct wiphy *wiphy, hdd_debug("encryption type %d", set_key.encType); - if (!pairwise) { - /* set group key */ - hdd_debug("setting Broadcast key"); - set_key.keyDirection = eSIR_RX_ONLY; - qdf_set_macaddr_broadcast(&set_key.peerMac); - } else { - /* set pairwise key */ - hdd_debug("setting pairwise key"); - set_key.keyDirection = eSIR_TX_RX; - qdf_mem_copy(set_key.peerMac.bytes, mac_addr, QDF_MAC_ADDR_SIZE); - } if ((QDF_IBSS_MODE == adapter->device_mode) && !pairwise) { /* if a key is already installed, block all subsequent ones */ if (adapter->session.station.ibss_enc_key_installed) { -- cgit v1.2.3