Selaa lähdekoodia

qcacld-3.0: Save previous auth algo in pe session

DUT retries auth with open system if shared key
authentication is not supported by AP. If auth
response from AP for open system auth has same
sequence number as that of shared key response,
host drops the frame.

Fix is to drop the auth frame only if previous
sequence number and auth algo match with current
sequence number and auth algo.

Change-Id: Ia02408d72371dfb91a7cae190ae9399cdf2e2e8b
CRs-Fixed: 2163231
Yeshwanth Sriram Guntuka 7 vuotta sitten
vanhempi
sitoutus
7cf307e148

+ 2 - 0
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;
 
 /*-------------------------------------------------------------------------

+ 12 - 9
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",

+ 1 - 0
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];
 }