From 5c1b7881a1065c1e307c6ea0b3605533ae2e4c23 Mon Sep 17 00:00:00 2001 From: Vinay Adella Date: Thu, 13 Jun 2019 18:19:29 +0530 Subject: [PATCH] qcacmn: Handle decrypt error packets for invalid peers Packets from STAs that are not associated are sometimes indicated as Decrypt error. Process these packets by sending a unicast Deauth packet to them. This is also required to trigger unicast Deauth, if the STA ignores broadcast Deauth and later send packets to AP in Deauthed state Change-Id: I6ebf848d4b9409931ae1750b5ff0617839b04105 --- dp/wifi3.0/dp_rx_err.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/dp/wifi3.0/dp_rx_err.c b/dp/wifi3.0/dp_rx_err.c index 4baaeab8ef57..c0e16fe6b67e 100644 --- a/dp/wifi3.0/dp_rx_err.c +++ b/dp/wifi3.0/dp_rx_err.c @@ -1405,7 +1405,8 @@ done: while (nbuf) { struct dp_peer *peer; uint16_t peer_id; - + uint8_t e_code; + uint8_t *tlv_hdr; rx_tlv_hdr = qdf_nbuf_data(nbuf); peer_id = hal_rx_mpdu_start_sw_peer_id_get(rx_tlv_hdr); @@ -1506,8 +1507,24 @@ done: continue; case HAL_RXDMA_ERR_DECRYPT: - if (peer) - DP_STATS_INC(peer, rx.err.decrypt_err, 1); + pool_id = wbm_err_info.pool_id; + e_code = wbm_err_info.rxdma_err_code; + tlv_hdr = rx_tlv_hdr; + if (peer) { + DP_STATS_INC(peer, rx.err. + decrypt_err, 1); + } else { + dp_rx_process_rxdma_err(soc, + nbuf, + tlv_hdr, + NULL, + e_code, + pool_id + ); + nbuf = next; + continue; + } + QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG, "Packet received with Decrypt error");