summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSrinivas Dasari <dasaris@codeaurora.org>2020-12-23 09:59:43 +0530
committerGerrit - the friendly Code Review server <code-review@localhost>2021-02-18 22:15:11 -0800
commit2668ab7b67e4d434e299a07ca11ad351ec313f8b (patch)
tree10314650b184ef6881d6eef528152d86444681c6
parent9f1aa3ef8470bda67547267ff2bd0b886072ec9f (diff)
qcacld-3.0: Send assoc reject upon failing to post ASSOC_IND
Currently, lim silently drops the association if it fails to post ASSOC_IND due to some reason(e.g. invalid contents of assoc request) and the MLM state is stuck in eLIM_MLM_WT_ASSOC_CNF_STATE. Station context is not cleaned up till the next association. Gracefully cleanup the association in such failure cases. Change-Id: Iede43a1ddc4ac6ef300af02776b153b58dd70c2c CRs-Fixed: 2810235
-rw-r--r--core/mac/src/pe/lim/lim_process_assoc_req_frame.c26
-rw-r--r--core/mac/src/pe/lim/lim_process_mlm_rsp_messages.c10
-rw-r--r--core/mac/src/pe/lim/lim_types.h17
3 files changed, 32 insertions, 21 deletions
diff --git a/core/mac/src/pe/lim/lim_process_assoc_req_frame.c b/core/mac/src/pe/lim/lim_process_assoc_req_frame.c
index 5cded988402d..1ec446dffacc 100644
--- a/core/mac/src/pe/lim/lim_process_assoc_req_frame.c
+++ b/core/mac/src/pe/lim/lim_process_assoc_req_frame.c
@@ -2382,19 +2382,9 @@ static void fill_mlm_assoc_ind_vht(tpSirAssocReq assocreq,
}
}
-/**
- * lim_send_mlm_assoc_ind() - Sends assoc indication to SME
- * @mac_ctx: Global Mac context
- * @sta_ds: Station DPH hash entry
- * @session_entry: PE session entry
- *
- * This function sends either LIM_MLM_ASSOC_IND
- * or LIM_MLM_REASSOC_IND to SME.
- *
- * Return: None
- */
-void lim_send_mlm_assoc_ind(tpAniSirGlobal mac_ctx,
- tpDphHashNode sta_ds, tpPESession session_entry)
+QDF_STATUS lim_send_mlm_assoc_ind(tpAniSirGlobal mac_ctx,
+ tpDphHashNode sta_ds,
+ tpPESession session_entry)
{
tpLimMlmAssocInd assoc_ind = NULL;
tpSirAssocReq assoc_req;
@@ -2407,7 +2397,7 @@ void lim_send_mlm_assoc_ind(tpAniSirGlobal mac_ctx,
if (!session_entry->parsedAssocReq) {
pe_err(" Parsed Assoc req is NULL");
- return;
+ return QDF_STATUS_E_INVAL;
}
/* Get a copy of the already parsed Assoc Request */
@@ -2416,7 +2406,7 @@ void lim_send_mlm_assoc_ind(tpAniSirGlobal mac_ctx,
if (!assoc_req) {
pe_err("assoc req for assoc_id:%d is NULL", sta_ds->assocId);
- return;
+ return QDF_STATUS_E_INVAL;
}
/* Get the phy_mode */
@@ -2441,7 +2431,7 @@ void lim_send_mlm_assoc_ind(tpAniSirGlobal mac_ctx,
lim_release_peer_idx(mac_ctx, sta_ds->assocId,
session_entry);
pe_err("AllocateMemory failed for assoc_ind");
- return;
+ return QDF_STATUS_E_NOMEM;
}
qdf_mem_copy((uint8_t *) assoc_ind->peerMacAddr,
(uint8_t *) sta_ds->staAddr, sizeof(tSirMacAddr));
@@ -2494,7 +2484,7 @@ void lim_send_mlm_assoc_ind(tpAniSirGlobal mac_ctx,
pe_err("rsnIEdata index out of bounds: %d",
rsn_len);
qdf_mem_free(assoc_ind);
- return;
+ return QDF_STATUS_E_INVAL;
}
assoc_ind->rsnIE.rsnIEdata[rsn_len] =
SIR_MAC_WPA_EID;
@@ -2648,5 +2638,5 @@ void lim_send_mlm_assoc_ind(tpAniSirGlobal mac_ctx,
(uint32_t *) assoc_ind);
qdf_mem_free(assoc_ind);
}
- return;
+ return QDF_STATUS_SUCCESS;
}
diff --git a/core/mac/src/pe/lim/lim_process_mlm_rsp_messages.c b/core/mac/src/pe/lim/lim_process_mlm_rsp_messages.c
index f21787407d6b..c513e55c40ac 100644
--- a/core/mac/src/pe/lim/lim_process_mlm_rsp_messages.c
+++ b/core/mac/src/pe/lim/lim_process_mlm_rsp_messages.c
@@ -1977,7 +1977,15 @@ void lim_process_ap_mlm_add_sta_rsp(tpAniSirGlobal pMac, tpSirMsgQ limMsgQ,
* 2) PE receives eWNI_SME_ASSOC_CNF from SME
* 3) BTAMP-AP sends Re/Association Response to BTAMP-STA
*/
- lim_send_mlm_assoc_ind(pMac, pStaDs, psessionEntry);
+ if (lim_send_mlm_assoc_ind(pMac, pStaDs, psessionEntry) !=
+ QDF_STATUS_SUCCESS) {
+ lim_reject_association(pMac, pStaDs->staAddr,
+ pStaDs->mlmStaContext.subType,
+ true, pStaDs->mlmStaContext.authType,
+ pStaDs->assocId, true,
+ eSIR_MAC_UNSPEC_FAILURE_STATUS,
+ psessionEntry);
+ }
/* fall though to reclaim the original Add STA Response message */
end:
if (0 != limMsgQ->bodyptr) {
diff --git a/core/mac/src/pe/lim/lim_types.h b/core/mac/src/pe/lim/lim_types.h
index babb7ffae70f..ac78c9f2ead6 100644
--- a/core/mac/src/pe/lim/lim_types.h
+++ b/core/mac/src/pe/lim/lim_types.h
@@ -458,8 +458,21 @@ tSirRetStatus lim_process_auth_frame_no_session(tpAniSirGlobal pMac, uint8_t *,
void *body);
void lim_process_assoc_req_frame(tpAniSirGlobal, uint8_t *, uint8_t, tpPESession);
-void lim_send_mlm_assoc_ind(tpAniSirGlobal pMac, tpDphHashNode pStaDs,
- tpPESession psessionEntry);
+
+/**
+ * lim_send_mlm_assoc_ind() - Sends assoc indication to SME
+ * @mac_ctx: Global Mac context
+ * @sta_ds: Station DPH hash entry
+ * @session_entry: PE session entry
+ *
+ * This function sends either LIM_MLM_ASSOC_IND
+ * or LIM_MLM_REASSOC_IND to SME.
+ *
+ * Return: QDF_STATUS
+ */
+QDF_STATUS lim_send_mlm_assoc_ind(tpAniSirGlobal mac_ctx,
+ tpDphHashNode sta_ds,
+ tpPESession session_entry);
void lim_process_assoc_rsp_frame(tpAniSirGlobal, uint8_t *, uint8_t, tpPESession);
void lim_process_disassoc_frame(tpAniSirGlobal, uint8_t *, tpPESession);