From 96c122ff77af37043e971a71f18ecfe76bd50f72 Mon Sep 17 00:00:00 2001 From: Arunk Khandavalli Date: Tue, 17 Oct 2017 11:49:36 +0530 Subject: [PATCH] qcacld-3.0: Free the ies in case during the stop adapter Reset the sap configuration ie while stopping the adapter in the sap mode to avoid memory leak. Change-Id: I5b47afe561430fcb3f508820bc74c28b56d28b3c CRs-Fixed: 2123524 --- core/hdd/src/wlan_hdd_main.c | 5 +++++ core/sap/src/sap_module.c | 24 +++++++++++++++--------- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index 748e23e6d0d4..ecae11b16cce 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -4358,6 +4358,7 @@ QDF_STATUS hdd_stop_adapter(struct hdd_context *hdd_ctx, struct hdd_adapter *ada union iwreq_data wrqu; tSirUpdateIE updateIE; unsigned long rc; + tsap_Config_t *sap_config; ENTER(); @@ -4462,6 +4463,10 @@ QDF_STATUS hdd_stop_adapter(struct hdd_context *hdd_ctx, struct hdd_adapter *ada case QDF_SAP_MODE: /* Flush IPA exception path packets */ + sap_config = &adapter->session.ap.sap_config; + if (sap_config) + wlansap_reset_sap_config_add_ie(sap_config, + eUPDATE_IE_ALL); hdd_ipa_flush(hdd_ctx); case QDF_P2P_GO_MODE: diff --git a/core/sap/src/sap_module.c b/core/sap/src/sap_module.c index e29a9547c53c..6912ffd8575d 100644 --- a/core/sap/src/sap_module.c +++ b/core/sap/src/sap_module.c @@ -2209,23 +2209,29 @@ wlansap_reset_sap_config_add_ie(tsap_Config_t *pConfig, eUpdateIEsType updateTyp switch (updateType) { case eUPDATE_IE_ALL: /*only used to reset */ case eUPDATE_IE_PROBE_RESP: - qdf_mem_free(pConfig->pProbeRespIEsBuffer); - pConfig->probeRespIEsBufferLen = 0; - pConfig->pProbeRespIEsBuffer = NULL; + if (pConfig->pProbeRespIEsBuffer) { + qdf_mem_free(pConfig->pProbeRespIEsBuffer); + pConfig->probeRespIEsBufferLen = 0; + pConfig->pProbeRespIEsBuffer = NULL; + } if (eUPDATE_IE_ALL != updateType) break; case eUPDATE_IE_ASSOC_RESP: - qdf_mem_free(pConfig->pAssocRespIEsBuffer); - pConfig->assocRespIEsLen = 0; - pConfig->pAssocRespIEsBuffer = NULL; + if (pConfig->pAssocRespIEsBuffer) { + qdf_mem_free(pConfig->pAssocRespIEsBuffer); + pConfig->assocRespIEsLen = 0; + pConfig->pAssocRespIEsBuffer = NULL; + } if (eUPDATE_IE_ALL != updateType) break; case eUPDATE_IE_PROBE_BCN: - qdf_mem_free(pConfig->pProbeRespBcnIEsBuffer); - pConfig->probeRespBcnIEsLen = 0; - pConfig->pProbeRespBcnIEsBuffer = NULL; + if (pConfig->pProbeRespBcnIEsBuffer) { + qdf_mem_free(pConfig->pProbeRespBcnIEsBuffer); + pConfig->probeRespBcnIEsLen = 0; + pConfig->pProbeRespBcnIEsBuffer = NULL; + } if (eUPDATE_IE_ALL != updateType) break;