qcacld-3.0: allocate static variables dynamically

We have some local variables allocated statically in LIM.
To reduce data segment size, allocate these variables dynamically
and then free.

Change-Id: I9ab6a180a89342ebace6f92336bfe30a498f5848
CRs-Fixed: 2307644
diff --git a/core/mac/src/pe/lim/lim_send_frames_host_roam.c b/core/mac/src/pe/lim/lim_send_frames_host_roam.c
index 0bd80e3..3a1c962 100644
--- a/core/mac/src/pe/lim/lim_send_frames_host_roam.c
+++ b/core/mac/src/pe/lim/lim_send_frames_host_roam.c
@@ -68,7 +68,7 @@
 	tLimMlmReassocReq *mlm_reassoc_req,
 	tpPESession pe_session)
 {
-	static tDot11fReAssocRequest frm;
+	tDot11fReAssocRequest *frm;
 	uint16_t caps;
 	uint8_t *frame;
 	uint32_t bytes, payload, status;
@@ -96,11 +96,17 @@
 	if (NULL == pe_session->pLimReAssocReq)
 		return;
 
+	frm = qdf_mem_malloc(sizeof(*frm));
+	if (!frm) {
+		pe_err("mem alloc failed");
+		goto err;
+	}
+
 	add_ie_len = pe_session->pLimReAssocReq->addIEAssoc.length;
 	add_ie = pe_session->pLimReAssocReq->addIEAssoc.addIEdata;
 	pe_debug("called in state: %d", pe_session->limMlmState);
 
-	qdf_mem_set((uint8_t *) &frm, sizeof(frm), 0);
+	qdf_mem_set((uint8_t *) frm, sizeof(*frm), 0);
 
 	caps = mlm_reassoc_req->capabilityInfo;
 #if defined(FEATURE_WLAN_WAPI)
@@ -115,21 +121,21 @@
 	if (pe_session->encryptType == eSIR_ED_WPI)
 		((tSirMacCapabilityInfo *) &caps)->privacy = 0;
 #endif
-	swap_bit_field16(caps, (uint16_t *) &frm.Capabilities);
+	swap_bit_field16(caps, (uint16_t *) &frm->Capabilities);
 
-	frm.ListenInterval.interval = mlm_reassoc_req->listenInterval;
+	frm->ListenInterval.interval = mlm_reassoc_req->listenInterval;
 
 	/*
 	 * Get the old bssid of the older AP.
 	 * The previous ap bssid is stored in the FT Session
 	 * while creating the PE FT Session for reassociation.
 	 */
-	qdf_mem_copy((uint8_t *)frm.CurrentAPAddress.mac,
+	qdf_mem_copy((uint8_t *)frm->CurrentAPAddress.mac,
 			pe_session->prev_ap_bssid, sizeof(tSirMacAddr));
 
-	populate_dot11f_ssid2(mac_ctx, &frm.SSID);
+	populate_dot11f_ssid2(mac_ctx, &frm->SSID);
 	populate_dot11f_supp_rates(mac_ctx, POPULATE_DOT11F_RATES_OPERATIONAL,
-		&frm.SuppRates, pe_session);
+		&frm->SuppRates, pe_session);
 
 	qos_enabled = (pe_session->limQosEnabled) &&
 		      SIR_MAC_GET_QOS(pe_session->limReassocBssCaps);
@@ -144,31 +150,31 @@
 	    pe_session->pLimReAssocReq->spectrumMgtIndicator == true) {
 		power_caps_populated = true;
 
-		populate_dot11f_power_caps(mac_ctx, &frm.PowerCaps,
+		populate_dot11f_power_caps(mac_ctx, &frm->PowerCaps,
 					   LIM_REASSOC, pe_session);
-		populate_dot11f_supp_channels(mac_ctx, &frm.SuppChannels,
+		populate_dot11f_supp_channels(mac_ctx, &frm->SuppChannels,
 			LIM_REASSOC, pe_session);
 	}
 	if (mac_ctx->rrm.rrmPEContext.rrmEnable &&
 	    SIR_MAC_GET_RRM(pe_session->limCurrentBssCaps)) {
 		if (power_caps_populated == false) {
 			power_caps_populated = true;
-			populate_dot11f_power_caps(mac_ctx, &frm.PowerCaps,
+			populate_dot11f_power_caps(mac_ctx, &frm->PowerCaps,
 				LIM_REASSOC, pe_session);
 		}
 	}
 
 	if (qos_enabled)
 		populate_dot11f_qos_caps_station(mac_ctx, pe_session,
-						&frm.QOSCapsStation);
+						&frm->QOSCapsStation);
 
 	populate_dot11f_ext_supp_rates(mac_ctx,
-		POPULATE_DOT11F_RATES_OPERATIONAL, &frm.ExtSuppRates,
+		POPULATE_DOT11F_RATES_OPERATIONAL, &frm->ExtSuppRates,
 		pe_session);
 
 	if (mac_ctx->rrm.rrmPEContext.rrmEnable &&
 	    SIR_MAC_GET_RRM(pe_session->limCurrentBssCaps))
-		populate_dot11f_rrm_ie(mac_ctx, &frm.RRMEnabledCap, pe_session);
+		populate_dot11f_rrm_ie(mac_ctx, &frm->RRMEnabledCap, pe_session);
 
 	/*
 	 * Ideally this should be enabled for 11r also. But 11r does
@@ -205,16 +211,16 @@
 		if (NULL == wps_ie) {
 			populate_dot11f_rsn_opaque(mac_ctx,
 				&(pe_session->pLimReAssocReq->rsnIE),
-				&frm.RSNOpaque);
+				&frm->RSNOpaque);
 			populate_dot11f_wpa_opaque(mac_ctx,
 				&(pe_session->pLimReAssocReq->rsnIE),
-				&frm.WPAOpaque);
+				&frm->WPAOpaque);
 		}
 #ifdef FEATURE_WLAN_ESE
 		if (pe_session->pLimReAssocReq->cckmIE.length) {
 			populate_dot11f_ese_cckm_opaque(mac_ctx,
 				&(pe_session->pLimReAssocReq->cckmIE),
-				&frm.ESECckmOpaque);
+				&frm->ESECckmOpaque);
 		}
 #endif
 	}
@@ -227,12 +233,12 @@
 	 */
 	if (pe_session->is_ese_version_ie_present &&
 		mac_ctx->roam.configParam.isEseIniFeatureEnabled)
-		populate_dot11f_ese_version(&frm.ESEVersion);
+		populate_dot11f_ese_version(&frm->ESEVersion);
 	/* For ESE Associations fill the ESE IEs */
 	if (pe_session->isESEconnection &&
 	    pe_session->pLimReAssocReq->isESEFeatureIniEnabled) {
 #ifndef FEATURE_DISABLE_RM
-		populate_dot11f_ese_rad_mgmt_cap(&frm.ESERadMgmtCap);
+		populate_dot11f_ese_rad_mgmt_cap(&frm->ESERadMgmtCap);
 #endif
 	}
 #endif /* FEATURE_WLAN_ESE */
@@ -240,15 +246,15 @@
 	/* include WME EDCA IE as well */
 	if (wme_enabled) {
 		populate_dot11f_wmm_info_station_per_session(mac_ctx,
-			pe_session, &frm.WMMInfoStation);
+			pe_session, &frm->WMMInfoStation);
 		if (wsm_enabled)
-			populate_dot11f_wmm_caps(&frm.WMMCaps);
+			populate_dot11f_wmm_caps(&frm->WMMCaps);
 #ifdef FEATURE_WLAN_ESE
 		if (pe_session->isESEconnection) {
 			uint32_t phymode;
 			uint8_t rate;
 
-			populate_dot11f_re_assoc_tspec(mac_ctx, &frm,
+			populate_dot11f_re_assoc_tspec(mac_ctx, frm,
 				pe_session);
 
 			/*
@@ -269,7 +275,7 @@
 				tsrs_ie.tsid = 0;
 				tsrs_ie.rates[0] = rate;
 				populate_dot11_tsrsie(mac_ctx, &tsrs_ie,
-					&frm.ESETrafStrmRateSet,
+					&frm->ESETrafStrmRateSet,
 					sizeof(uint8_t));
 			}
 		}
@@ -279,7 +285,7 @@
 	ft_sme_context = &mac_ctx->roam.roamSession[sme_sessionid].ftSmeContext;
 	if (pe_session->htCapability &&
 	    mac_ctx->lim.htCapabilityPresentInBeacon) {
-		populate_dot11f_ht_caps(mac_ctx, pe_session, &frm.HTCaps);
+		populate_dot11f_ht_caps(mac_ctx, pe_session, &frm->HTCaps);
 	}
 	if (pe_session->pLimReAssocReq->bssDescription.mdiePresent &&
 	    (ft_sme_context->addMDIE == true)
@@ -287,36 +293,36 @@
 	    && !pe_session->isESEconnection
 #endif
 	    ) {
-		populate_mdie(mac_ctx, &frm.MobilityDomain,
+		populate_mdie(mac_ctx, &frm->MobilityDomain,
 			pe_session->pLimReAssocReq->bssDescription.mdie);
 	}
 	if (pe_session->vhtCapability &&
 	    pe_session->vhtCapabilityPresentInBeacon) {
 		pe_debug("Populate VHT IEs in Re-Assoc Request");
-		populate_dot11f_vht_caps(mac_ctx, pe_session, &frm.VHTCaps);
+		populate_dot11f_vht_caps(mac_ctx, pe_session, &frm->VHTCaps);
 		vht_enabled = true;
-		populate_dot11f_ext_cap(mac_ctx, vht_enabled, &frm.ExtCap,
+		populate_dot11f_ext_cap(mac_ctx, vht_enabled, &frm->ExtCap,
 			pe_session);
 	}
 	if (!vht_enabled &&
 			pe_session->is_vendor_specific_vhtcaps) {
 		pe_debug("Populate Vendor VHT IEs in Re-Assoc Request");
-		frm.vendor_vht_ie.present = 1;
-		frm.vendor_vht_ie.sub_type =
+		frm->vendor_vht_ie.present = 1;
+		frm->vendor_vht_ie.sub_type =
 			pe_session->vendor_specific_vht_ie_sub_type;
-		frm.vendor_vht_ie.VHTCaps.present = 1;
+		frm->vendor_vht_ie.VHTCaps.present = 1;
 		populate_dot11f_vht_caps(mac_ctx, pe_session,
-				&frm.vendor_vht_ie.VHTCaps);
+				&frm->vendor_vht_ie.VHTCaps);
 		vht_enabled = true;
 	}
 
 	if (lim_is_session_he_capable(pe_session)) {
 		pe_debug("Populate HE IEs");
 		populate_dot11f_he_caps(mac_ctx, pe_session,
-					&frm.he_cap);
+					&frm->he_cap);
 	}
 
-	status = dot11f_get_packed_re_assoc_request_size(mac_ctx, &frm,
+	status = dot11f_get_packed_re_assoc_request_size(mac_ctx, frm,
 			&payload);
 	if (DOT11F_FAILED(status)) {
 		pe_err("Failure in size calculation (0x%08x)", status);
@@ -354,7 +360,7 @@
 		pe_session->selfMacAddr);
 	mac_hdr = (tpSirMacMgmtHdr) frame;
 	/* That done, pack the ReAssoc Request: */
-	status = dot11f_pack_re_assoc_request(mac_ctx, &frm, frame +
+	status = dot11f_pack_re_assoc_request(mac_ctx, frm, frame +
 					       sizeof(tSirMacMgmtHdr),
 					       payload, &payload);
 	if (DOT11F_FAILED(status)) {
@@ -458,6 +464,8 @@
 	}
 
 end:
+	qdf_mem_free(frm);
+err:
 	/* Free up buffer allocated for mlmAssocReq */
 	qdf_mem_free(mlm_reassoc_req);
 	pe_session->pLimMlmReassocReq = NULL;
@@ -540,7 +548,7 @@
 				tLimMlmReassocReq *pMlmReassocReq,
 				tpPESession psessionEntry)
 {
-	static tDot11fReAssocRequest frm;
+	tDot11fReAssocRequest *frm;
 	uint16_t caps;
 	uint8_t *pFrame;
 	uint32_t nBytes, nPayload, nStatus;
@@ -562,10 +570,16 @@
 	smeSessionId = psessionEntry->smeSessionId;
 	if (NULL == psessionEntry->pLimReAssocReq)
 		return;
+
+	frm = qdf_mem_malloc(sizeof(*frm));
+	if (!frm) {
+		pe_err("mem alloc failed");
+		goto err;
+	}
 	nAddIELen = psessionEntry->pLimReAssocReq->addIEAssoc.length;
 	pAddIE = psessionEntry->pLimReAssocReq->addIEAssoc.addIEdata;
 
-	qdf_mem_set((uint8_t *) &frm, sizeof(frm), 0);
+	qdf_mem_set((uint8_t *) frm, sizeof(*frm), 0);
 
 	caps = pMlmReassocReq->capabilityInfo;
 #if defined(FEATURE_WLAN_WAPI)
@@ -581,16 +595,16 @@
 	if (psessionEntry->encryptType == eSIR_ED_WPI)
 		((tSirMacCapabilityInfo *) &caps)->privacy = 0;
 #endif
-	swap_bit_field16(caps, (uint16_t *) &frm.Capabilities);
+	swap_bit_field16(caps, (uint16_t *) &frm->Capabilities);
 
-	frm.ListenInterval.interval = pMlmReassocReq->listenInterval;
+	frm->ListenInterval.interval = pMlmReassocReq->listenInterval;
 
-	qdf_mem_copy((uint8_t *) frm.CurrentAPAddress.mac,
+	qdf_mem_copy((uint8_t *) frm->CurrentAPAddress.mac,
 		     (uint8_t *) psessionEntry->bssId, 6);
 
-	populate_dot11f_ssid2(pMac, &frm.SSID);
+	populate_dot11f_ssid2(pMac, &frm->SSID);
 	populate_dot11f_supp_rates(pMac, POPULATE_DOT11F_RATES_OPERATIONAL,
-				   &frm.SuppRates, psessionEntry);
+				   &frm->SuppRates, psessionEntry);
 
 	fQosEnabled = (psessionEntry->limQosEnabled) &&
 		      SIR_MAC_GET_QOS(psessionEntry->limReassocBssCaps);
@@ -604,30 +618,30 @@
 	if (psessionEntry->lim11hEnable &&
 	    psessionEntry->pLimReAssocReq->spectrumMgtIndicator == true) {
 		PowerCapsPopulated = true;
-		populate_dot11f_power_caps(pMac, &frm.PowerCaps, LIM_REASSOC,
+		populate_dot11f_power_caps(pMac, &frm->PowerCaps, LIM_REASSOC,
 					   psessionEntry);
-		populate_dot11f_supp_channels(pMac, &frm.SuppChannels,
+		populate_dot11f_supp_channels(pMac, &frm->SuppChannels,
 				LIM_REASSOC, psessionEntry);
 	}
 	if (pMac->rrm.rrmPEContext.rrmEnable &&
 	    SIR_MAC_GET_RRM(psessionEntry->limCurrentBssCaps)) {
 		if (PowerCapsPopulated == false) {
 			PowerCapsPopulated = true;
-			populate_dot11f_power_caps(pMac, &frm.PowerCaps,
+			populate_dot11f_power_caps(pMac, &frm->PowerCaps,
 						   LIM_REASSOC, psessionEntry);
 		}
 	}
 
 	if (fQosEnabled)
 		populate_dot11f_qos_caps_station(pMac, psessionEntry,
-						&frm.QOSCapsStation);
+						&frm->QOSCapsStation);
 
 	populate_dot11f_ext_supp_rates(pMac, POPULATE_DOT11F_RATES_OPERATIONAL,
-				       &frm.ExtSuppRates, psessionEntry);
+				       &frm->ExtSuppRates, psessionEntry);
 
 	if (pMac->rrm.rrmPEContext.rrmEnable &&
 	    SIR_MAC_GET_RRM(psessionEntry->limCurrentBssCaps))
-		populate_dot11f_rrm_ie(pMac, &frm.RRMEnabledCap, psessionEntry);
+		populate_dot11f_rrm_ie(pMac, &frm->RRMEnabledCap, psessionEntry);
 	/* The join request *should* contain zero or one of the WPA and RSN */
 	/* IEs.  The payload send along with the request is a */
 	/* 'tSirSmeJoinReq'; the IE portion is held inside a 'tSirRSNie': */
@@ -653,45 +667,45 @@
 	if (NULL == wpsIe) {
 		populate_dot11f_rsn_opaque(pMac,
 				&(psessionEntry->pLimReAssocReq->rsnIE),
-				&frm.RSNOpaque);
+				&frm->RSNOpaque);
 		populate_dot11f_wpa_opaque(pMac,
 				&(psessionEntry->pLimReAssocReq->rsnIE),
-				&frm.WPAOpaque);
+				&frm->WPAOpaque);
 #if defined(FEATURE_WLAN_WAPI)
 		populate_dot11f_wapi_opaque(pMac,
 					    &(psessionEntry->pLimReAssocReq->
-					      rsnIE), &frm.WAPIOpaque);
+					      rsnIE), &frm->WAPIOpaque);
 #endif /* defined(FEATURE_WLAN_WAPI) */
 	}
 	/* include WME EDCA IE as well */
 	if (fWmeEnabled) {
 		populate_dot11f_wmm_info_station_per_session(pMac,
-				psessionEntry, &frm.WMMInfoStation);
+				psessionEntry, &frm->WMMInfoStation);
 
 		if (fWsmEnabled)
-			populate_dot11f_wmm_caps(&frm.WMMCaps);
+			populate_dot11f_wmm_caps(&frm->WMMCaps);
 	}
 
 	if (psessionEntry->htCapability &&
 	    pMac->lim.htCapabilityPresentInBeacon) {
-		populate_dot11f_ht_caps(pMac, psessionEntry, &frm.HTCaps);
+		populate_dot11f_ht_caps(pMac, psessionEntry, &frm->HTCaps);
 	}
 	if (psessionEntry->vhtCapability &&
 	    psessionEntry->vhtCapabilityPresentInBeacon) {
 		pe_warn("Populate VHT IEs in Re-Assoc Request");
-		populate_dot11f_vht_caps(pMac, psessionEntry, &frm.VHTCaps);
+		populate_dot11f_vht_caps(pMac, psessionEntry, &frm->VHTCaps);
 		isVHTEnabled = true;
 	}
-	populate_dot11f_ext_cap(pMac, isVHTEnabled, &frm.ExtCap, psessionEntry);
+	populate_dot11f_ext_cap(pMac, isVHTEnabled, &frm->ExtCap, psessionEntry);
 
 	if (lim_is_session_he_capable(psessionEntry)) {
 		pe_debug("Populate HE IEs");
 		populate_dot11f_he_caps(pMac, psessionEntry,
-					&frm.he_cap);
+					&frm->he_cap);
 	}
 
 	nStatus =
-		dot11f_get_packed_re_assoc_request_size(pMac, &frm, &nPayload);
+		dot11f_get_packed_re_assoc_request_size(pMac, frm, &nPayload);
 	if (DOT11F_FAILED(nStatus)) {
 		pe_err("Fail to get size:ReassocReq: (0x%08x)", nStatus);
 		/* We'll fall back on the worst case scenario: */
@@ -723,7 +737,7 @@
 	pMacHdr = (tpSirMacMgmtHdr) pFrame;
 
 	/* That done, pack the Probe Request: */
-	nStatus = dot11f_pack_re_assoc_request(pMac, &frm, pFrame +
+	nStatus = dot11f_pack_re_assoc_request(pMac, frm, pFrame +
 					       sizeof(tSirMacMgmtHdr),
 					       nPayload, &nPayload);
 	if (DOT11F_FAILED(nStatus)) {
@@ -791,6 +805,8 @@
 	}
 
 end:
+	qdf_mem_free(frm);
+err:
 	/* Free up buffer allocated for mlmAssocReq */
 	qdf_mem_free(pMlmReassocReq);
 	psessionEntry->pLimMlmReassocReq = NULL;
diff --git a/core/mac/src/sys/legacy/src/utils/src/parser_api.c b/core/mac/src/sys/legacy/src/utils/src/parser_api.c
index 7dfe196..8f93b2f 100644
--- a/core/mac/src/sys/legacy/src/utils/src/parser_api.c
+++ b/core/mac/src/sys/legacy/src/utils/src/parser_api.c
@@ -3228,15 +3228,20 @@
 				      uint8_t *pFrame,
 				      uint32_t nFrame, tpSirAssocReq pAssocReq)
 {
-	static tDot11fReAssocRequest ar;
+	tDot11fReAssocRequest *ar;
 	uint32_t status;
 
+	ar = qdf_mem_malloc(sizeof(*ar));
+	if (!ar) {
+		pe_err("mem alloc failed");
+		return QDF_STATUS_E_NOMEM;
+	}
 	/* Zero-init our [out] parameter, */
 	qdf_mem_set((uint8_t *) pAssocReq, sizeof(tSirAssocReq), 0);
 
 	/* delegate to the framesc-generated code, */
 	status = dot11f_unpack_re_assoc_request(pMac, pFrame, nFrame,
-						&ar, false);
+						ar, false);
 	if (DOT11F_FAILED(status)) {
 		pe_err("Failed to parse a Re-association Request (0x%08x, %d bytes):",
 			status, nFrame);
@@ -3253,87 +3258,87 @@
 	pAssocReq->reassocRequest = 1;
 
 	/* Capabilities */
-	pAssocReq->capabilityInfo.ess = ar.Capabilities.ess;
-	pAssocReq->capabilityInfo.ibss = ar.Capabilities.ibss;
-	pAssocReq->capabilityInfo.cfPollable = ar.Capabilities.cfPollable;
-	pAssocReq->capabilityInfo.cfPollReq = ar.Capabilities.cfPollReq;
-	pAssocReq->capabilityInfo.privacy = ar.Capabilities.privacy;
-	pAssocReq->capabilityInfo.shortPreamble = ar.Capabilities.shortPreamble;
-	pAssocReq->capabilityInfo.pbcc = ar.Capabilities.pbcc;
+	pAssocReq->capabilityInfo.ess = ar->Capabilities.ess;
+	pAssocReq->capabilityInfo.ibss = ar->Capabilities.ibss;
+	pAssocReq->capabilityInfo.cfPollable = ar->Capabilities.cfPollable;
+	pAssocReq->capabilityInfo.cfPollReq = ar->Capabilities.cfPollReq;
+	pAssocReq->capabilityInfo.privacy = ar->Capabilities.privacy;
+	pAssocReq->capabilityInfo.shortPreamble = ar->Capabilities.shortPreamble;
+	pAssocReq->capabilityInfo.pbcc = ar->Capabilities.pbcc;
 	pAssocReq->capabilityInfo.channelAgility =
-		ar.Capabilities.channelAgility;
-	pAssocReq->capabilityInfo.spectrumMgt = ar.Capabilities.spectrumMgt;
-	pAssocReq->capabilityInfo.qos = ar.Capabilities.qos;
-	pAssocReq->capabilityInfo.shortSlotTime = ar.Capabilities.shortSlotTime;
-	pAssocReq->capabilityInfo.apsd = ar.Capabilities.apsd;
-	pAssocReq->capabilityInfo.rrm = ar.Capabilities.rrm;
-	pAssocReq->capabilityInfo.dsssOfdm = ar.Capabilities.dsssOfdm;
-	pAssocReq->capabilityInfo.delayedBA = ar.Capabilities.delayedBA;
-	pAssocReq->capabilityInfo.immediateBA = ar.Capabilities.immediateBA;
+		ar->Capabilities.channelAgility;
+	pAssocReq->capabilityInfo.spectrumMgt = ar->Capabilities.spectrumMgt;
+	pAssocReq->capabilityInfo.qos = ar->Capabilities.qos;
+	pAssocReq->capabilityInfo.shortSlotTime = ar->Capabilities.shortSlotTime;
+	pAssocReq->capabilityInfo.apsd = ar->Capabilities.apsd;
+	pAssocReq->capabilityInfo.rrm = ar->Capabilities.rrm;
+	pAssocReq->capabilityInfo.dsssOfdm = ar->Capabilities.dsssOfdm;
+	pAssocReq->capabilityInfo.delayedBA = ar->Capabilities.delayedBA;
+	pAssocReq->capabilityInfo.immediateBA = ar->Capabilities.immediateBA;
 
 	/* Listen Interval */
-	pAssocReq->listenInterval = ar.ListenInterval.interval;
+	pAssocReq->listenInterval = ar->ListenInterval.interval;
 
 	/* SSID */
-	if (ar.SSID.present) {
+	if (ar->SSID.present) {
 		pAssocReq->ssidPresent = 1;
-		convert_ssid(pMac, &pAssocReq->ssId, &ar.SSID);
+		convert_ssid(pMac, &pAssocReq->ssId, &ar->SSID);
 	}
 	/* Supported Rates */
-	if (ar.SuppRates.present) {
+	if (ar->SuppRates.present) {
 		pAssocReq->suppRatesPresent = 1;
 		convert_supp_rates(pMac, &pAssocReq->supportedRates,
-				   &ar.SuppRates);
+				   &ar->SuppRates);
 	}
 	/* Extended Supported Rates */
-	if (ar.ExtSuppRates.present) {
+	if (ar->ExtSuppRates.present) {
 		pAssocReq->extendedRatesPresent = 1;
 		convert_ext_supp_rates(pMac, &pAssocReq->extendedRates,
-				       &ar.ExtSuppRates);
+				       &ar->ExtSuppRates);
 	}
 	/* QOS Capabilities: */
-	if (ar.QOSCapsStation.present) {
+	if (ar->QOSCapsStation.present) {
 		pAssocReq->qosCapabilityPresent = 1;
 		convert_qos_caps_station(pMac, &pAssocReq->qosCapability,
-					 &ar.QOSCapsStation);
+					 &ar->QOSCapsStation);
 	}
 	/* WPA */
-	if (ar.WPAOpaque.present) {
+	if (ar->WPAOpaque.present) {
 		pAssocReq->wpaPresent = 1;
-		convert_wpa_opaque(pMac, &pAssocReq->wpa, &ar.WPAOpaque);
+		convert_wpa_opaque(pMac, &pAssocReq->wpa, &ar->WPAOpaque);
 	}
 	/* RSN */
-	if (ar.RSNOpaque.present) {
+	if (ar->RSNOpaque.present) {
 		pAssocReq->rsnPresent = 1;
-		convert_rsn_opaque(pMac, &pAssocReq->rsn, &ar.RSNOpaque);
+		convert_rsn_opaque(pMac, &pAssocReq->rsn, &ar->RSNOpaque);
 	}
 
 	/* Power Capabilities */
-	if (ar.PowerCaps.present) {
+	if (ar->PowerCaps.present) {
 		pAssocReq->powerCapabilityPresent = 1;
 		convert_power_caps(pMac, &pAssocReq->powerCapability,
-				   &ar.PowerCaps);
+				   &ar->PowerCaps);
 	}
 	/* Supported Channels */
-	if (ar.SuppChannels.present) {
+	if (ar->SuppChannels.present) {
 		pAssocReq->supportedChannelsPresent = 1;
 		convert_supp_channels(pMac, &pAssocReq->supportedChannels,
-				      &ar.SuppChannels);
+				      &ar->SuppChannels);
 	}
 
-	if (ar.HTCaps.present) {
-		qdf_mem_copy(&pAssocReq->HTCaps, &ar.HTCaps,
+	if (ar->HTCaps.present) {
+		qdf_mem_copy(&pAssocReq->HTCaps, &ar->HTCaps,
 			     sizeof(tDot11fIEHTCaps));
 	}
 
-	if (ar.WMMInfoStation.present) {
+	if (ar->WMMInfoStation.present) {
 		pAssocReq->wmeInfoPresent = 1;
-		qdf_mem_copy(&pAssocReq->WMMInfoStation, &ar.WMMInfoStation,
+		qdf_mem_copy(&pAssocReq->WMMInfoStation, &ar->WMMInfoStation,
 			     sizeof(tDot11fIEWMMInfoStation));
 
 	}
 
-	if (ar.WMMCaps.present)
+	if (ar->WMMCaps.present)
 		pAssocReq->wsmCapablePresent = 1;
 
 	if (!pAssocReq->ssidPresent) {
@@ -3349,46 +3354,47 @@
 	/* there is in 'sir_convert_assoc_req_frame2_struct'? */
 
 	/* WSC IE */
-	if (ar.WscIEOpaque.present) {
+	if (ar->WscIEOpaque.present) {
 		pAssocReq->addIEPresent = 1;
-		convert_wsc_opaque(pMac, &pAssocReq->addIE, &ar.WscIEOpaque);
+		convert_wsc_opaque(pMac, &pAssocReq->addIE, &ar->WscIEOpaque);
 	}
 
-	if (ar.P2PIEOpaque.present) {
+	if (ar->P2PIEOpaque.present) {
 		pAssocReq->addIEPresent = 1;
-		convert_p2p_opaque(pMac, &pAssocReq->addIE, &ar.P2PIEOpaque);
+		convert_p2p_opaque(pMac, &pAssocReq->addIE, &ar->P2PIEOpaque);
 	}
 #ifdef WLAN_FEATURE_WFD
-	if (ar.WFDIEOpaque.present) {
+	if (ar->WFDIEOpaque.present) {
 		pAssocReq->addIEPresent = 1;
-		convert_wfd_opaque(pMac, &pAssocReq->addIE, &ar.WFDIEOpaque);
+		convert_wfd_opaque(pMac, &pAssocReq->addIE, &ar->WFDIEOpaque);
 	}
 #endif
 
-	if (ar.VHTCaps.present) {
-		qdf_mem_copy(&pAssocReq->VHTCaps, &ar.VHTCaps,
+	if (ar->VHTCaps.present) {
+		qdf_mem_copy(&pAssocReq->VHTCaps, &ar->VHTCaps,
 			     sizeof(tDot11fIEVHTCaps));
 	}
-	if (ar.OperatingMode.present) {
-		qdf_mem_copy(&pAssocReq->operMode, &ar.OperatingMode,
+	if (ar->OperatingMode.present) {
+		qdf_mem_copy(&pAssocReq->operMode, &ar->OperatingMode,
 			     sizeof(tDot11fIEOperatingMode));
 		pe_warn("Received Assoc Req with Operating Mode IE");
 		lim_log_operating_mode(pMac, &pAssocReq->operMode);
 	}
-	if (ar.ExtCap.present) {
+	if (ar->ExtCap.present) {
 		struct s_ext_cap *ext_cap;
 
-		qdf_mem_copy(&pAssocReq->ExtCap, &ar.ExtCap,
+		qdf_mem_copy(&pAssocReq->ExtCap, &ar->ExtCap,
 			     sizeof(tDot11fIEExtCap));
 		ext_cap = (struct s_ext_cap *)&pAssocReq->ExtCap.bytes;
 		pe_debug("timingMeas: %d, finetimingMeas Init: %d, Resp: %d",
 			ext_cap->timing_meas, ext_cap->fine_time_meas_initiator,
 			ext_cap->fine_time_meas_responder);
 	}
-	if (ar.he_cap.present) {
-		qdf_mem_copy(&pAssocReq->he_cap, &ar.he_cap,
+	if (ar->he_cap.present) {
+		qdf_mem_copy(&pAssocReq->he_cap, &ar->he_cap,
 			     sizeof(tDot11fIEhe_cap));
 	}
+	qdf_mem_free(ar);
 
 	return QDF_STATUS_SUCCESS;