Skip to content

Commit

Permalink
qcacld-3.0: Send assoc reject upon failing to post ASSOC_IND
Browse files Browse the repository at this point in the history
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
  • Loading branch information
Srinivas Dasari authored and Gerrit - the friendly Code Review server committed Feb 1, 2021
1 parent 6dea46e commit 73d5f55
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 21 deletions.
26 changes: 8 additions & 18 deletions core/mac/src/pe/lim/lim_process_assoc_req_frame.c
Original file line number Diff line number Diff line change
Expand Up @@ -2546,19 +2546,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;
Expand All @@ -2571,7 +2561,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 */
Expand All @@ -2580,7 +2570,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 */
Expand All @@ -2605,7 +2595,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));
Expand Down Expand Up @@ -2659,7 +2649,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;
Expand Down Expand Up @@ -2819,5 +2809,5 @@ void lim_send_mlm_assoc_ind(tpAniSirGlobal mac_ctx,
(uint32_t *) assoc_ind);
qdf_mem_free(assoc_ind);
}
return;
return QDF_STATUS_SUCCESS;
}
10 changes: 9 additions & 1 deletion core/mac/src/pe/lim/lim_process_mlm_rsp_messages.c
Original file line number Diff line number Diff line change
Expand Up @@ -1993,7 +1993,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) {
Expand Down
17 changes: 15 additions & 2 deletions core/mac/src/pe/lim/lim_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -474,8 +474,21 @@ QDF_STATUS lim_process_auth_frame_no_session(tpAniSirGlobal mac,


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);
Expand Down

0 comments on commit 73d5f55

Please sign in to comment.