wlan: Reduce the stack size in the CORE Stack module.
Allocate dynamic memory and free the memory at the end of the function
or any error cases.
Change-Id: I0d1865e6741165e00e4231d1967fd5907a558da6
CR-Fixed: 397801
diff --git a/CORE/SYS/legacy/src/utils/src/parserApi.c b/CORE/SYS/legacy/src/utils/src/parserApi.c
index 50624f1..76765b2 100644
--- a/CORE/SYS/legacy/src/utils/src/parserApi.c
+++ b/CORE/SYS/legacy/src/utils/src/parserApi.c
@@ -2166,20 +2166,27 @@
tANI_U32 nFrame,
tpSirAssocReq pAssocReq)
{
- tDot11fAssocRequest ar;
+ tDot11fAssocRequest *ar;
tANI_U32 status;
- // Zero-init our [out] parameter,
+ status = palAllocateMemory(pMac->hHdd, (void **)&ar, sizeof(tDot11fAssocRequest));
+ if(!HAL_STATUS_SUCCESS(status))
+ {
+ limLog(pMac, LOGE, FL("Failed to allocate memory\n") );
+ return eSIR_FAILURE;
+ }
+ // Zero-init our [out] parameter,
palZeroMemory( pMac->hHdd, ( tANI_U8* )pAssocReq, sizeof(tSirAssocReq) );
- palZeroMemory( pMac->hHdd, ( tANI_U8* )&ar, sizeof( tDot11fAssocRequest ) );
+ palZeroMemory( pMac->hHdd, ( tANI_U8* )ar, sizeof( tDot11fAssocRequest ) );
// delegate to the framesc-generated code,
- status = dot11fUnpackAssocRequest( pMac, pFrame, nFrame, &ar );
+ status = dot11fUnpackAssocRequest( pMac, pFrame, nFrame, ar );
if ( DOT11F_FAILED( status ) )
{
limLog(pMac, LOGE, FL("Failed to parse an Association Request (0x%08x, %d bytes):\n"),
status, nFrame);
PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pFrame, nFrame);)
+ palFreeMemory(pMac->hHdd, ar);
return eSIR_FAILURE;
}
else if ( DOT11F_WARNED( status ) )
@@ -2195,150 +2202,151 @@
pAssocReq->reassocRequest = 0;
// 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.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;
+ 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;
// Listen Interval
- pAssocReq->listenInterval = ar.ListenInterval.interval;
+ pAssocReq->listenInterval = ar->ListenInterval.interval;
// SSID
- if ( ar.SSID.present )
+ if ( ar->SSID.present )
{
pAssocReq->ssidPresent = 1;
- ConvertSSID( pMac, &pAssocReq->ssId, &ar.SSID );
+ ConvertSSID( pMac, &pAssocReq->ssId, &ar->SSID );
}
// Supported Rates
- if ( ar.SuppRates.present )
+ if ( ar->SuppRates.present )
{
pAssocReq->suppRatesPresent = 1;
- ConvertSuppRates( pMac, &pAssocReq->supportedRates, &ar.SuppRates );
+ ConvertSuppRates( pMac, &pAssocReq->supportedRates, &ar->SuppRates );
}
// Extended Supported Rates
- if ( ar.ExtSuppRates.present )
+ if ( ar->ExtSuppRates.present )
{
pAssocReq->extendedRatesPresent = 1;
- ConvertExtSuppRates( pMac, &pAssocReq->extendedRates, &ar.ExtSuppRates );
+ ConvertExtSuppRates( pMac, &pAssocReq->extendedRates, &ar->ExtSuppRates );
}
// QOS Capabilities:
- if ( ar.QOSCapsStation.present )
+ if ( ar->QOSCapsStation.present )
{
pAssocReq->qosCapabilityPresent = 1;
- ConvertQOSCapsStation( pMac, &pAssocReq->qosCapability, &ar.QOSCapsStation );
+ ConvertQOSCapsStation( pMac, &pAssocReq->qosCapability, &ar->QOSCapsStation );
}
// WPA
- if ( ar.WPAOpaque.present )
+ if ( ar->WPAOpaque.present )
{
pAssocReq->wpaPresent = 1;
- ConvertWPAOpaque( pMac, &pAssocReq->wpa, &ar.WPAOpaque );
+ ConvertWPAOpaque( pMac, &pAssocReq->wpa, &ar->WPAOpaque );
}
// RSN
- if ( ar.RSNOpaque.present )
+ if ( ar->RSNOpaque.present )
{
pAssocReq->rsnPresent = 1;
- ConvertRSNOpaque( pMac, &pAssocReq->rsn, &ar.RSNOpaque );
+ ConvertRSNOpaque( pMac, &pAssocReq->rsn, &ar->RSNOpaque );
}
// WSC IE
- if (ar.WscIEOpaque.present)
+ if (ar->WscIEOpaque.present)
{
pAssocReq->addIEPresent = 1;
- ConvertWscOpaque(pMac, &pAssocReq->addIE, &ar.WscIEOpaque);
+ ConvertWscOpaque(pMac, &pAssocReq->addIE, &ar->WscIEOpaque);
}
#ifdef WLAN_FEATURE_P2P
- if(ar.P2PIEOpaque.present)
+ if(ar->P2PIEOpaque.present)
{
pAssocReq->addIEPresent = 1;
- ConvertP2POpaque( pMac, &pAssocReq->addIE, &ar.P2PIEOpaque);
+ ConvertP2POpaque( pMac, &pAssocReq->addIE, &ar->P2PIEOpaque);
}
#endif
-
#ifdef WLAN_FEATURE_WFD
- if(ar.WFDIEOpaque.present)
+ if(ar->WFDIEOpaque.present)
{
pAssocReq->addIEPresent = 1;
- ConvertWFDOpaque( pMac, &pAssocReq->addIE, &ar.WFDIEOpaque);
+ ConvertWFDOpaque( pMac, &pAssocReq->addIE, &ar->WFDIEOpaque);
}
#endif
// Power Capabilities
- if ( ar.PowerCaps.present )
+ if ( ar->PowerCaps.present )
{
pAssocReq->powerCapabilityPresent = 1;
- ConvertPowerCaps( pMac, &pAssocReq->powerCapability, &ar.PowerCaps );
+ ConvertPowerCaps( pMac, &pAssocReq->powerCapability, &ar->PowerCaps );
}
// Supported Channels
- if ( ar.SuppChannels.present )
+ if ( ar->SuppChannels.present )
{
pAssocReq->supportedChannelsPresent = 1;
- ConvertSuppChannels( pMac, &pAssocReq->supportedChannels, &ar.SuppChannels );
+ ConvertSuppChannels( pMac, &pAssocReq->supportedChannels, &ar->SuppChannels );
}
- if ( ar.HTCaps.present )
+ if ( ar->HTCaps.present )
{
- palCopyMemory( pMac, &pAssocReq->HTCaps, &ar.HTCaps, sizeof( tDot11fIEHTCaps ) );
+ palCopyMemory( pMac, &pAssocReq->HTCaps, &ar->HTCaps, sizeof( tDot11fIEHTCaps ) );
}
- if ( ar.WMMInfoStation.present )
+ if ( ar->WMMInfoStation.present )
{
pAssocReq->wmeInfoPresent = 1;
#ifdef WLAN_SOFTAP_FEATURE
- palCopyMemory( pMac, &pAssocReq->WMMInfoStation, &ar.WMMInfoStation, sizeof( tDot11fIEWMMInfoStation ) );
+ palCopyMemory( pMac, &pAssocReq->WMMInfoStation, &ar->WMMInfoStation, sizeof( tDot11fIEWMMInfoStation ) );
#endif
}
- if ( ar.WMMCaps.present ) pAssocReq->wsmCapablePresent = 1;
+ if ( ar->WMMCaps.present ) pAssocReq->wsmCapablePresent = 1;
if ( ! pAssocReq->ssidPresent )
{
PELOG2(limLog(pMac, LOG2, FL("Received Assoc without SSID IE.\n"));)
+ palFreeMemory(pMac->hHdd, ar);
return eSIR_FAILURE;
}
if ( !pAssocReq->suppRatesPresent && !pAssocReq->extendedRatesPresent )
{
PELOG2(limLog(pMac, LOG2, FL("Received Assoc without supp rate IE.\n"));)
+ palFreeMemory(pMac->hHdd, ar);
return eSIR_FAILURE;
}
#ifdef WLAN_FEATURE_11AC
- if ( ar.VHTCaps.present )
+ if ( ar->VHTCaps.present )
{
- palCopyMemory( pMac, &pAssocReq->VHTCaps, &ar.VHTCaps, sizeof( tDot11fIEVHTCaps ) );
+ palCopyMemory( pMac, &pAssocReq->VHTCaps, &ar->VHTCaps, sizeof( tDot11fIEVHTCaps ) );
limLog( pMac, LOGW, FL("Received Assoc Req with VHT Cap\n"));
limLogVHTCap( pMac, &pAssocReq->VHTCaps);
}
- if ( ar.OperatingMode.present )
+ if ( ar->OperatingMode.present )
{
- palCopyMemory( pMac, &pAssocReq->operMode, &ar.OperatingMode, sizeof( tDot11fIEVHTCaps ) );
+ palCopyMemory( pMac, &pAssocReq->operMode, &ar->OperatingMode, sizeof( tDot11fIEVHTCaps ) );
limLog( pMac, LOGW, FL("Received Assoc Req with Operating Mode IE\n"));
limLogOperatingMode( pMac, &pAssocReq->operMode);
}
#endif
-
+ palFreeMemory(pMac->hHdd, ar);
return eSIR_SUCCESS;
} // End sirConvertAssocReqFrame2Struct.