mirror of
https://github.com/Divested-Mobile/DivestOS-Build.git
synced 2024-10-01 01:35:54 -04:00
106 lines
4.8 KiB
Diff
106 lines
4.8 KiB
Diff
From 39fa8e972fa1b10dc68a066f4f9432753d8a2526 Mon Sep 17 00:00:00 2001
|
|
From: kaliu <kaliu@qti.qualcomm.com>
|
|
Date: Thu, 4 Aug 2016 14:08:13 +0800
|
|
Subject: qcacld-2.0: Use heap memory for station_info instead of stack
|
|
|
|
From kernel 3.19-rc4, size of struct station_info is around 600 bytes,
|
|
so stack frame size of such routine use this struct will easily
|
|
exceed 1024 bytes, the default value of stack frame size.
|
|
|
|
So use heap memory for this struct instead.
|
|
|
|
Change-Id: Ibe8a4f5189fcc9d5554f7a5d851c93be8fa8dbad
|
|
CRs-Fixed: 1050323
|
|
---
|
|
CORE/HDD/src/wlan_hdd_assoc.c | 19 +++++++++++++------
|
|
CORE/HDD/src/wlan_hdd_hostapd.c | 18 ++++++++++++------
|
|
2 files changed, 25 insertions(+), 12 deletions(-)
|
|
|
|
diff --git a/CORE/HDD/src/wlan_hdd_assoc.c b/CORE/HDD/src/wlan_hdd_assoc.c
|
|
index 492785d..c5947c2 100644
|
|
--- a/CORE/HDD/src/wlan_hdd_assoc.c
|
|
+++ b/CORE/HDD/src/wlan_hdd_assoc.c
|
|
@@ -2811,7 +2811,7 @@ static eHalStatus roamRoamConnectStatusUpdateHandler( hdd_adapter_t *pAdapter, t
|
|
case eCSR_ROAM_RESULT_IBSS_NEW_PEER:
|
|
{
|
|
hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter);
|
|
- struct station_info staInfo;
|
|
+ struct station_info *stainfo;
|
|
|
|
VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
|
|
"IBSS New Peer indication from SME with peerMac " MAC_ADDRESS_STR " BSSID: " MAC_ADDRESS_STR " and stationID= %d",
|
|
@@ -2846,13 +2846,20 @@ static eHalStatus roamRoamConnectStatusUpdateHandler( hdd_adapter_t *pAdapter, t
|
|
vosStatus, vosStatus );
|
|
}
|
|
pHddStaCtx->ibss_sta_generation++;
|
|
- memset(&staInfo, 0, sizeof(staInfo));
|
|
- staInfo.filled = 0;
|
|
- staInfo.generation = pHddStaCtx->ibss_sta_generation;
|
|
+ stainfo = vos_mem_malloc(sizeof(*stainfo));
|
|
+ if (stainfo == NULL) {
|
|
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
|
|
+ "memory allocation for station_info failed");
|
|
+ return eHAL_STATUS_FAILED_ALLOC;
|
|
+ }
|
|
+ memset(stainfo, 0, sizeof(*stainfo));
|
|
+ stainfo->filled = 0;
|
|
+ stainfo->generation = pHddStaCtx->ibss_sta_generation;
|
|
|
|
cfg80211_new_sta(pAdapter->dev,
|
|
- (const u8 *)pRoamInfo->peerMac,
|
|
- &staInfo, GFP_KERNEL);
|
|
+ (const u8 *)pRoamInfo->peerMac,
|
|
+ stainfo, GFP_KERNEL);
|
|
+ vos_mem_free(stainfo);
|
|
|
|
if ( eCSR_ENCRYPT_TYPE_WEP40_STATICKEY == pHddStaCtx->ibss_enc_key.encType
|
|
||eCSR_ENCRYPT_TYPE_WEP104_STATICKEY == pHddStaCtx->ibss_enc_key.encType
|
|
diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c
|
|
index ba37ddc..1b7c1c7 100644
|
|
--- a/CORE/HDD/src/wlan_hdd_hostapd.c
|
|
+++ b/CORE/HDD/src/wlan_hdd_hostapd.c
|
|
@@ -1836,15 +1836,20 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa
|
|
HDD_SAP_WAKE_LOCK_DURATION,
|
|
WIFI_POWER_EVENT_WAKELOCK_SAP);
|
|
{
|
|
- struct station_info staInfo;
|
|
v_U16_t iesLen = pSapEvent->sapevt.sapStationAssocReassocCompleteEvent.iesLen;
|
|
|
|
- memset(&staInfo, 0, sizeof(staInfo));
|
|
if (iesLen <= MAX_ASSOC_IND_IE_LEN )
|
|
{
|
|
- staInfo.assoc_req_ies =
|
|
+ struct station_info *stainfo;
|
|
+ stainfo = vos_mem_malloc(sizeof(*stainfo));
|
|
+ if (stainfo == NULL) {
|
|
+ hddLog(LOGE, FL("alloc station_info failed"));
|
|
+ return VOS_STATUS_E_NOMEM;
|
|
+ }
|
|
+ memset(stainfo, 0, sizeof(*stainfo));
|
|
+ stainfo->assoc_req_ies =
|
|
(const u8 *)&pSapEvent->sapevt.sapStationAssocReassocCompleteEvent.ies[0];
|
|
- staInfo.assoc_req_ies_len = iesLen;
|
|
+ stainfo->assoc_req_ies_len = iesLen;
|
|
#if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 0))
|
|
/*
|
|
* After Kernel 4.0, it's no longer need to set
|
|
@@ -1853,12 +1858,13 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa
|
|
* check the existance of request IE.
|
|
*/
|
|
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,31)) || defined(WITH_BACKPORTS)
|
|
- staInfo.filled |= STATION_INFO_ASSOC_REQ_IES;
|
|
+ stainfo->filled |= STATION_INFO_ASSOC_REQ_IES;
|
|
#endif
|
|
#endif
|
|
cfg80211_new_sta(dev,
|
|
(const u8 *)&pSapEvent->sapevt.sapStationAssocReassocCompleteEvent.staMac.bytes[0],
|
|
- &staInfo, GFP_KERNEL);
|
|
+ stainfo, GFP_KERNEL);
|
|
+ vos_mem_free(stainfo);
|
|
}
|
|
else
|
|
{
|
|
--
|
|
cgit v1.1
|
|
|