diff options
| author | Rajeev Kumar <rajekuma@codeaurora.org> | 2017-11-14 16:16:05 -0800 |
|---|---|---|
| committer | snandini <snandini@codeaurora.org> | 2017-11-14 21:43:11 -0800 |
| commit | 993d7712c050f6eaae6edde8848df69800a7fba6 (patch) | |
| tree | 209dd1493ff471f665c7dbc9f7867f57b899c0b6 | |
| parent | 67a8e8115db9bc135d967d2a3272ac627d963a72 (diff) | |
qcacld-3.0: Optimize stack memory allocation in CSR msg processor
csr_roaming_state_msg_processor() is declaring roam_info on stack
which is of size 736 bytes. Kernel stack has limited size and all
big data structures should be allocated from heap to avoid stack
overflow. Hence allocate roam_info struct from heap and free it
after callback has returned.
Change-Id: I282d9baa9f3e679bfd5b628f0baaadf4beec86af
CRs-Fixed: 2143439
| -rw-r--r-- | core/sme/src/csr/csr_api_roam.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 79b08e501484..291798700942 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -10116,7 +10116,7 @@ void csr_roaming_state_msg_processor(tpAniSirGlobal pMac, void *pMsgBuf) { tSirSmeRsp *pSmeRsp; tSmeIbssPeerInd *pIbssPeerInd; - tCsrRoamInfo roamInfo; + tCsrRoamInfo *roam_info; pSmeRsp = (tSirSmeRsp *) pMsgBuf; sme_debug("Message %d[0x%04X] received in substate %s", @@ -10194,14 +10194,19 @@ void csr_roaming_state_msg_processor(tpAniSirGlobal pMac, void *pMsgBuf) case eWNI_SME_IBSS_PEER_DEPARTED_IND: pIbssPeerInd = (tSmeIbssPeerInd *) pSmeRsp; sme_err("Peer departed ntf from LIM in joining state"); - qdf_mem_set(&roamInfo, sizeof(tCsrRoamInfo), 0); - roamInfo.staId = (uint8_t) pIbssPeerInd->staId; - roamInfo.ucastSig = (uint8_t) pIbssPeerInd->ucastSig; - roamInfo.bcastSig = (uint8_t) pIbssPeerInd->bcastSig; - qdf_copy_macaddr(&roamInfo.peerMac, &pIbssPeerInd->peer_addr); - csr_roam_call_callback(pMac, pSmeRsp->sessionId, &roamInfo, 0, + roam_info = qdf_mem_malloc(sizeof(*roam_info)); + if (!roam_info) { + sme_err("failed to allocate memory for roam_info"); + break; + } + roam_info->staId = (uint8_t) pIbssPeerInd->staId; + roam_info->ucastSig = (uint8_t) pIbssPeerInd->ucastSig; + roam_info->bcastSig = (uint8_t) pIbssPeerInd->bcastSig; + qdf_copy_macaddr(&roam_info->peerMac, &pIbssPeerInd->peer_addr); + csr_roam_call_callback(pMac, pSmeRsp->sessionId, roam_info, 0, eCSR_ROAM_CONNECT_STATUS_UPDATE, eCSR_ROAM_RESULT_IBSS_PEER_DEPARTED); + qdf_mem_free(roam_info); break; case eWNI_SME_GET_RSSI_REQ: { |
