From 6fc3c50ad0f1bd5139dc21686099fb0ed30e8c22 Mon Sep 17 00:00:00 2001 From: Naveen Rawat Date: Wed, 6 Sep 2017 16:14:11 -0700 Subject: [PATCH] qcacld-3.0: Save processed AUTH frames seq number in pe_session In case STAUT is using auto-switch auth type for WEP, a retried AUTH frame from AP can mess up our state machine and connection will fail. Save seq number of processed auth so that retried frame can be dropped in host. Change-Id: I00cedf594309e0bb9b4bb8f0ced2929e7d00f64d CRs-Fixed: 2102402 --- core/mac/src/pe/include/lim_session.h | 2 ++ core/mac/src/pe/lim/lim_process_auth_frame.c | 10 ++++++++++ core/mac/src/pe/lim/lim_session.c | 2 ++ 3 files changed, 14 insertions(+) diff --git a/core/mac/src/pe/include/lim_session.h b/core/mac/src/pe/include/lim_session.h index 29aa56faa3e0..da68e93d4b40 100644 --- a/core/mac/src/pe/include/lim_session.h +++ b/core/mac/src/pe/include/lim_session.h @@ -522,6 +522,8 @@ typedef struct sPESession /* Added to Support BT-AMP */ #ifdef WLAN_FEATURE_FILS_SK struct pe_fils_session *fils_info; #endif + /* previous auth frame's sequence number */ + uint16_t prev_auth_seq_num; } tPESession, *tpPESession; /*------------------------------------------------------------------------- diff --git a/core/mac/src/pe/lim/lim_process_auth_frame.c b/core/mac/src/pe/lim/lim_process_auth_frame.c index 0fdc1c119ea1..d2682c6d3982 100644 --- a/core/mac/src/pe/lim/lim_process_auth_frame.c +++ b/core/mac/src/pe/lim/lim_process_auth_frame.c @@ -1093,6 +1093,16 @@ lim_process_auth_frame(tpAniSirGlobal mac_ctx, uint8_t *rx_pkt_info, pe_session->limMlmState, MAC_ADDR_ARRAY(mac_hdr->bssId), (uint) abs((int8_t) WMA_GET_RX_RSSI_NORMALIZED(rx_pkt_info))); + if (pe_session->pePersona == QDF_STA_MODE && + pe_session->prev_auth_seq_num == curr_seq_num) { + pe_err("auth frame, seq num: %d is already processed, drop it", + curr_seq_num); + return; + } + + /* save seq number in pe_session */ + pe_session->prev_auth_seq_num = curr_seq_num; + body_ptr = WMA_GET_RX_MPDU_DATA(rx_pkt_info); /* Restore default failure timeout */ diff --git a/core/mac/src/pe/lim/lim_session.c b/core/mac/src/pe/lim/lim_session.c index ffc1ad735410..07f411afc5fd 100644 --- a/core/mac/src/pe/lim/lim_session.c +++ b/core/mac/src/pe/lim/lim_session.c @@ -539,6 +539,8 @@ pe_create_session(tpAniSirGlobal pMac, uint8_t *bssid, uint8_t *sessionId, pe_init_fils_info(session_ptr); pe_init_pmf_comeback_timer(pMac, session_ptr, *sessionId); session_ptr->ht_client_cnt = 0; + /* following is invalid value since seq number is 12 bit */ + session_ptr->prev_auth_seq_num = 0xFFFF; return &pMac->lim.gpSession[i]; }