prima: 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: I348a7d3ffc537cf89dc311da7bb9846e27635efe
CRs-Fixed: 2857049
This commit is contained in:
Srinivas Dasari
2021-10-10 23:46:47 +02:00
committed by Francescodario Cuzzocrea
parent e92fee434d
commit 0feadfa2a1
3 changed files with 14 additions and 8 deletions
@@ -1501,7 +1501,7 @@ error:
\param pMac \param pMac
\param *pStaDs - Station DPH hash entry \param *pStaDs - Station DPH hash entry
\param psessionEntry - PE session entry \param psessionEntry - PE session entry
\return None \return tSirRetStatus
* ?????? How do I get * ?????? How do I get
* - subtype =====> psessionEntry->parsedAssocReq.reassocRequest * - subtype =====> psessionEntry->parsedAssocReq.reassocRequest
@@ -1511,7 +1511,7 @@ error:
* - pHdr->seqControl =====> no longer needed * - pHdr->seqControl =====> no longer needed
* - pStaDs * - pStaDs
------------------------------------------------------------------*/ ------------------------------------------------------------------*/
void limSendMlmAssocInd(tpAniSirGlobal pMac, tpDphHashNode pStaDs, tpPESession psessionEntry) tSirRetStatus limSendMlmAssocInd(tpAniSirGlobal pMac, tpDphHashNode pStaDs, tpPESession psessionEntry)
{ {
tpLimMlmAssocInd pMlmAssocInd = NULL; tpLimMlmAssocInd pMlmAssocInd = NULL;
tpLimMlmReassocInd pMlmReassocInd; tpLimMlmReassocInd pMlmReassocInd;
@@ -1550,7 +1550,7 @@ void limSendMlmAssocInd(tpAniSirGlobal pMac, tpDphHashNode pStaDs, tpPESession p
{ {
limReleasePeerIdx(pMac, pStaDs->assocId, psessionEntry); limReleasePeerIdx(pMac, pStaDs->assocId, psessionEntry);
limLog(pMac, LOGP, FL("AllocateMemory failed for pMlmAssocInd")); limLog(pMac, LOGP, FL("AllocateMemory failed for pMlmAssocInd"));
return; return eSIR_MEM_ALLOC_FAILED;
} }
vos_mem_set(pMlmAssocInd, temp ,0); vos_mem_set(pMlmAssocInd, temp ,0);
@@ -1603,7 +1603,7 @@ void limSendMlmAssocInd(tpAniSirGlobal pMac, tpDphHashNode pStaDs, tpPESession p
PELOGE(limLog(pMac, LOGE, FL("rsnIEdata index out of bounds %d"), PELOGE(limLog(pMac, LOGE, FL("rsnIEdata index out of bounds %d"),
pMlmAssocInd->rsnIE.length);) pMlmAssocInd->rsnIE.length);)
vos_mem_free(pMlmAssocInd); vos_mem_free(pMlmAssocInd);
return; return eSIR_FAILURE;
} }
pMlmAssocInd->rsnIE.rsnIEdata[pMlmAssocInd->rsnIE.length] = SIR_MAC_WPA_EID; pMlmAssocInd->rsnIE.rsnIEdata[pMlmAssocInd->rsnIE.length] = SIR_MAC_WPA_EID;
pMlmAssocInd->rsnIE.rsnIEdata[pMlmAssocInd->rsnIE.length + 1] = pAssocReq->wpa.length; pMlmAssocInd->rsnIE.rsnIEdata[pMlmAssocInd->rsnIE.length + 1] = pAssocReq->wpa.length;
@@ -1674,7 +1674,7 @@ void limSendMlmAssocInd(tpAniSirGlobal pMac, tpDphHashNode pStaDs, tpPESession p
limLog(pMac, LOGP, FL("call to AllocateMemory failed for " limLog(pMac, LOGP, FL("call to AllocateMemory failed for "
"pMlmReassocInd")); "pMlmReassocInd"));
limReleasePeerIdx(pMac, pStaDs->assocId, psessionEntry); limReleasePeerIdx(pMac, pStaDs->assocId, psessionEntry);
return; return eSIR_MEM_ALLOC_FAILED;
} }
vos_mem_set(pMlmReassocInd, temp, 0); vos_mem_set(pMlmReassocInd, temp, 0);
@@ -1798,6 +1798,6 @@ void limSendMlmAssocInd(tpAniSirGlobal pMac, tpDphHashNode pStaDs, tpPESession p
vos_mem_free(pMlmReassocInd); vos_mem_free(pMlmReassocInd);
} }
return; return eSIR_SUCCESS;
} /*** end limSendMlmAssocInd() ***/ } /*** end limSendMlmAssocInd() ***/
@@ -2518,7 +2518,13 @@ void limProcessBtAmpApMlmAddStaRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ,tpPES
* 2) PE receives eWNI_SME_ASSOC_CNF from SME * 2) PE receives eWNI_SME_ASSOC_CNF from SME
* 3) BTAMP-AP sends Re/Association Response to BTAMP-STA * 3) BTAMP-AP sends Re/Association Response to BTAMP-STA
*/ */
limSendMlmAssocInd(pMac, pStaDs, psessionEntry); if (eSIR_SUCCESS != limSendMlmAssocInd(pMac, pStaDs, psessionEntry))
limRejectAssociation(pMac, pStaDs->staAddr,
pStaDs->mlmStaContext.subType,
true, pStaDs->mlmStaContext.authType,
pStaDs->assocId, true,
(tSirResultCodes) eSIR_MAC_UNSPEC_FAILURE_STATUS,
psessionEntry);
// fall though to reclaim the original Add STA Response message // fall though to reclaim the original Add STA Response message
end: end:
if( 0 != limMsgQ->bodyptr ) if( 0 != limMsgQ->bodyptr )
@@ -664,7 +664,7 @@ tSirRetStatus limProcessAuthFrameNoSession(tpAniSirGlobal pMac, tANI_U8 *, void
#endif #endif
void limProcessAssocReqFrame(tpAniSirGlobal, tANI_U8 *, tANI_U8, tpPESession); void limProcessAssocReqFrame(tpAniSirGlobal, tANI_U8 *, tANI_U8, tpPESession);
void limSendMlmAssocInd(tpAniSirGlobal pMac, tpDphHashNode pStaDs, tpPESession psessionEntry); tSirRetStatus limSendMlmAssocInd(tpAniSirGlobal pMac, tpDphHashNode pStaDs, tpPESession psessionEntry);
void limProcessAssocRspFrame(tpAniSirGlobal, tANI_U8 *, tANI_U8,tpPESession); void limProcessAssocRspFrame(tpAniSirGlobal, tANI_U8 *, tANI_U8,tpPESession);