diff --git a/core/mac/src/pe/include/lim_session.h b/core/mac/src/pe/include/lim_session.h index f673c350143f..3e3192427ff6 100644 --- a/core/mac/src/pe/include/lim_session.h +++ b/core/mac/src/pe/include/lim_session.h @@ -528,6 +528,8 @@ typedef struct sPESession /* Added to Support BT-AMP */ #endif /* previous auth frame's sequence number */ uint16_t prev_auth_seq_num; + /* previous auth algo */ + uint16_t prev_auth_algo; } 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 0087c6ca7861..e2d576e40a3e 100644 --- a/core/mac/src/pe/lim/lim_process_auth_frame.c +++ b/core/mac/src/pe/lim/lim_process_auth_frame.c @@ -1096,15 +1096,6 @@ 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->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 */ @@ -1344,6 +1335,18 @@ lim_process_auth_frame(tpAniSirGlobal mac_ctx, uint8_t *rx_pkt_info, goto free; } + if (pe_session->prev_auth_seq_num == curr_seq_num && + pe_session->prev_auth_algo == rx_auth_frame->authAlgoNumber) { + pe_err("auth frame, seq num: %d is already processed, drop it", + curr_seq_num); + goto free; + } + + /* save seq number in pe_session */ + pe_session->prev_auth_seq_num = curr_seq_num; + + pe_session->prev_auth_algo = rx_auth_frame->authAlgoNumber; + rx_auth_frm_body = rx_auth_frame; pe_debug("Received Auth frame with type: %d seqnum: %d status: %d %d", diff --git a/core/mac/src/pe/lim/lim_session.c b/core/mac/src/pe/lim/lim_session.c index 79fe6723efa7..b9d23949aa74 100644 --- a/core/mac/src/pe/lim/lim_session.c +++ b/core/mac/src/pe/lim/lim_session.c @@ -541,6 +541,7 @@ pe_create_session(tpAniSirGlobal pMac, uint8_t *bssid, uint8_t *sessionId, session_ptr->ht_client_cnt = 0; /* following is invalid value since seq number is 12 bit */ session_ptr->prev_auth_seq_num = 0xFFFF; + session_ptr->prev_auth_algo = 0xFFFF; return &pMac->lim.gpSession[i]; }