summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSrinivas Dasari <dasaris@codeaurora.org>2020-12-23 09:59:43 +0530
committerchenpaul <chenpaul@google.com>2021-02-03 14:54:17 +0800
commite9d2d558d46815e2fd9ec335b27f56c0d7329c42 (patch)
tree9a3aaef111a3a25427e65d8ef1315d5dd11bf904
parent0c71ddc53c3e5e1e8302e0aad90357bf16f0c994 (diff)
downloadqcacld-e9d2d558d46815e2fd9ec335b27f56c0d7329c42.tar.gz
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 Bug: 177955534 Signed-off-by: Srinivas Girigowda <quic_sgirigow@quicinc.com>
-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 a4c0ee9115..1a95b9851b 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
@@ -2340,19 +2340,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;
@@ -2365,7 +2355,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 */
@@ -2374,7 +2364,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 */
@@ -2399,7 +2389,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));
@@ -2452,7 +2442,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;
@@ -2604,5 +2594,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 74d04ac606..79c181984b 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
@@ -2013,7 +2013,15 @@ void lim_process_ap_mlm_add_sta_rsp(tpAniSirGlobal pMac,
* 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 df90080b8e..b801f85502 100644
--- a/core/mac/src/pe/lim/lim_types.h
+++ b/core/mac/src/pe/lim/lim_types.h
@@ -459,8 +459,21 @@ QDF_STATUS 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);