qcacld-3.0: Error handling in Roaming code #2
Qcacld-2.0 to qcacld-3.0 propagation.
This fix contains the following changes
1. Ensure rx mgmt packet is freed in all cases.
2. Fail preauth if the pre-auth response timer
failed to start.
3. Correct some logging and remove unnecessary code.
Change-Id: Icd3a12ba8878de5bad7ff1125ba8be123dfae4eb
CRs-Fixed: 808756
diff --git a/core/mac/src/pe/lim/lim_ft.c b/core/mac/src/pe/lim/lim_ft.c
index c96327c..92769e8 100644
--- a/core/mac/src/pe/lim/lim_ft.c
+++ b/core/mac/src/pe/lim/lim_ft.c
@@ -370,35 +370,28 @@
psessionEntry->ftPEContext.pFTPreAuthReq) {
/* Only 11r assoc has FT IEs */
if (psessionEntry->ftPEContext.pFTPreAuthReq->ft_ies == NULL) {
- PELOGE(lim_log(pMac, LOGE,
- "%s: FTIEs for Auth Req Seq 1 is absent",
- __func__);
- )
+ lim_log(pMac, LOGE,
+ FL("FTIEs for Auth Req Seq 1 is absent"));
goto preauth_fail;
}
}
if (status != CDF_STATUS_SUCCESS) {
- PELOGE(lim_log(pMac, LOGE,
- "%s: Change channel not successful for FT pre-auth",
- __func__);
- )
+ lim_log(pMac, LOGE,
+ FL(" Change channel not successful for FT pre-auth"));
goto preauth_fail;
}
/* Nothing to be done if the session is not in STA mode */
if (!LIM_IS_STA_ROLE(psessionEntry)) {
#if defined WLAN_FEATURE_VOWIFI_11R_DEBUG
- PELOGE(lim_log
- (pMac, LOGE, FL("psessionEntry is not in STA mode"));
- )
+ lim_log(pMac, LOGE, FL("psessionEntry is not in STA mode"));
#endif
return;
}
#if defined WLAN_FEATURE_VOWIFI_11R_DEBUG
- PELOG2(lim_log(pMac, LOG2, "Entered wait auth2 state for FT"
- " (old session %p)", psessionEntry);
- )
+ lim_log(pMac, LOG2, "Entered wait auth2 state for FT (old session %p)",
+ psessionEntry);
#endif
if (psessionEntry->is11Rconnection) {
/* Now we are on the right channel and need to send out Auth1 and
@@ -423,15 +416,15 @@
if (TX_SUCCESS !=
tx_timer_activate(&pMac->lim.limTimers.gLimFTPreAuthRspTimer)) {
#if defined WLAN_FEATURE_VOWIFI_11R_DEBUG
- PELOGE(lim_log(pMac, LOGE, FL("FT Auth Rsp Timer Start Failed"));)
+ lim_log(pMac, LOGE, FL("FT Auth Rsp Timer Start Failed"));
#endif
+ goto preauth_fail;
}
- MTRACE(mac_trace
- (pMac, TRACE_CODE_TIMER_ACTIVATE, psessionEntry->peSessionId,
- eLIM_FT_PREAUTH_RSP_TIMER));
+ MTRACE(mac_trace(pMac, TRACE_CODE_TIMER_ACTIVATE,
+ psessionEntry->peSessionId, eLIM_FT_PREAUTH_RSP_TIMER));
#if defined WLAN_FEATURE_VOWIFI_11R_DEBUG
- PELOG1(lim_log(pMac, LOG1, FL("FT Auth Rsp Timer Started"));)
+ lim_log(pMac, LOG1, FL("FT Auth Rsp Timer Started"));
#endif
#ifdef FEATURE_WLAN_DIAG_SUPPORT
lim_diag_event_report(pMac, WLAN_PE_DIAG_ROAM_AUTH_START_EVENT,
@@ -439,8 +432,8 @@
#endif
lim_send_auth_mgmt_frame(pMac, &authFrame,
- psessionEntry->ftPEContext.pFTPreAuthReq->
- preAuthbssId, LIM_NO_WEP_IN_FC, psessionEntry);
+ psessionEntry->ftPEContext.pFTPreAuthReq->preAuthbssId,
+ LIM_NO_WEP_IN_FC, psessionEntry);
return;
diff --git a/core/mac/src/pe/lim/lim_process_message_queue.c b/core/mac/src/pe/lim/lim_process_message_queue.c
index ac63aee..928e5d7 100644
--- a/core/mac/src/pe/lim/lim_process_message_queue.c
+++ b/core/mac/src/pe/lim/lim_process_message_queue.c
@@ -804,8 +804,7 @@
if (fc.subType == SIR_MAC_MGMT_AUTH) {
#ifdef WLAN_FEATURE_VOWIFI_11R_DEBUG
lim_log(pMac, LOG1,
- FL
- ("ProtVersion %d, Type %d, Subtype %d rateIndex=%d"),
+ FL("ProtVersion %d, Type %d, Subtype %d rateIndex=%d"),
fc.protVer, fc.type, fc.subType,
WMA_GET_RX_MAC_RATE_IDX(pRxPacketInfo));
lim_print_mac_addr(pMac, pHdr->bssId, LOG1);
@@ -813,31 +812,28 @@
if (lim_process_auth_frame_no_session
(pMac, pRxPacketInfo,
limMsg->bodyptr) == eSIR_SUCCESS) {
- lim_pkt_free(pMac, TXRX_FRM_802_11_MGMT,
- pRxPacketInfo, limMsg->bodyptr);
- return;
+ goto end;
}
}
#endif
+ /* Public action frame can be received from non-assoc stations*/
if ((fc.subType != SIR_MAC_MGMT_PROBE_RSP) &&
(fc.subType != SIR_MAC_MGMT_BEACON) &&
(fc.subType != SIR_MAC_MGMT_PROBE_REQ)
- && (fc.subType != SIR_MAC_MGMT_ACTION) /* Public action frame can be received from non-associated stations. */
- ) {
+ && (fc.subType != SIR_MAC_MGMT_ACTION)) {
- if ((psessionEntry =
- pe_find_session_by_peer_sta(pMac, pHdr->sa,
- &sessionId)) == NULL) {
- lim_log(pMac, LOG1,
- FL
- ("session does not exist for given bssId"));
- lim_pkt_free(pMac, TXRX_FRM_802_11_MGMT,
- pRxPacketInfo, limMsg->bodyptr);
- return;
- } else
- lim_log(pMac, LOG1,
- "SessionId:%d Session Exist for given Bssid",
+ psessionEntry = pe_find_session_by_peer_sta(pMac,
+ pHdr->sa, &sessionId);
+ if (psessionEntry == NULL) {
+ lim_log(pMac, LOG3,
+ FL("session does not exist for bssId"));
+ lim_print_mac_addr(pMac, pHdr->sa, LOG3);
+ goto end;
+ } else {
+ lim_log(pMac, LOG3,
+ "SessionId:%d exists for given Bssid",
psessionEntry->peSessionId);
+ }
}
/* For p2p resp frames search for valid session with DA as */
/* BSSID will be SA and session will be present with DA only */
@@ -850,9 +846,7 @@
/* Check if frame is registered by HDD */
if (lim_check_mgmt_registered_frames(pMac, pRxPacketInfo, psessionEntry)) {
lim_log(pMac, LOG1, FL("Received frame is passed to SME"));
- lim_pkt_free(pMac, TXRX_FRM_802_11_MGMT, pRxPacketInfo,
- limMsg->bodyptr);
- return;
+ goto end;
}
if (fc.protVer != SIR_MAC_PROTOCOL_VERSION) { /* Received Frame with non-zero Protocol Version */
@@ -864,7 +858,7 @@
#ifdef WLAN_DEBUG
pMac->lim.numProtErr++;
#endif
- return;
+ goto end;
}
/* Chance of crashing : to be done BT-AMP ........happens when broadcast probe req is received */
diff --git a/core/mac/src/pe/lim/lim_process_mlm_req_messages.c b/core/mac/src/pe/lim/lim_process_mlm_req_messages.c
index 8693bd8..c1761c8 100644
--- a/core/mac/src/pe/lim/lim_process_mlm_req_messages.c
+++ b/core/mac/src/pe/lim/lim_process_mlm_req_messages.c
@@ -1874,7 +1874,6 @@
lim_process_mlm_disassoc_req(tpAniSirGlobal mac_ctx, uint32_t *msg_buf)
{
tLimMlmDisassocReq *mlm_disassoc_req;
- tpPESession session;
if (msg_buf == NULL) {
lim_log(mac_ctx, LOGE,
@@ -1888,15 +1887,6 @@
mlm_disassoc_req->sessionId,
MAC_ADDR_ARRAY(mlm_disassoc_req->peerMacAddr));
- session = pe_find_session_by_session_id(mac_ctx,
- mlm_disassoc_req->sessionId);
- if (NULL == session) {
- lim_log(mac_ctx, LOGE,
- FL("session does not exist for given sessionId %d"),
- mlm_disassoc_req->sessionId);
- return;
- }
-
lim_process_mlm_disassoc_req_ntf(mac_ctx, CDF_STATUS_SUCCESS,
(uint32_t *) msg_buf);
}
diff --git a/core/mac/src/pe/lim/lim_process_sme_req_messages.c b/core/mac/src/pe/lim/lim_process_sme_req_messages.c
index ee010b6..934531e 100644
--- a/core/mac/src/pe/lim/lim_process_sme_req_messages.c
+++ b/core/mac/src/pe/lim/lim_process_sme_req_messages.c
@@ -2476,6 +2476,9 @@
switch (psessionEntry->limSmeState) {
case eLIM_SME_ASSOCIATED_STATE:
case eLIM_SME_LINK_EST_STATE:
+ lim_log(pMac, LOG1,
+ FL("Rcvd SME_DISASSOC_REQ in limSmeState: %d "),
+ psessionEntry->limSmeState);
psessionEntry->limPrevSmeState =
psessionEntry->limSmeState;
psessionEntry->limSmeState = eLIM_SME_WT_DISASSOC_STATE;
@@ -2483,13 +2486,9 @@
/* Delete all TDLS peers connected before leaving BSS */
lim_delete_tdls_peers(pMac, psessionEntry);
#endif
- MTRACE(mac_trace
- (pMac, TRACE_CODE_SME_STATE,
- psessionEntry->peSessionId,
- psessionEntry->limSmeState));
- lim_log(pMac, LOG1,
- FL("Rcvd SME_DISASSOC_REQ while in limSmeState: %d "),
- psessionEntry->limSmeState);
+ MTRACE(mac_trace(pMac, TRACE_CODE_SME_STATE,
+ psessionEntry->peSessionId,
+ psessionEntry->limSmeState));
break;
case eLIM_SME_WT_DEAUTH_STATE: