Merge "wlan: Fix corruption of Beacon Frame due to probe resp template" into wlan-driver.lnx.1.0-dev.1.0
diff --git a/CORE/MAC/src/pe/include/schGlobal.h b/CORE/MAC/src/pe/include/schGlobal.h
index 7bfcede..ba823bb 100644
--- a/CORE/MAC/src/pe/include/schGlobal.h
+++ b/CORE/MAC/src/pe/include/schGlobal.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2013 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2013, 2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -79,7 +79,7 @@
/// Maximum allowable size of a beacon frame
#define SCH_MAX_BEACON_SIZE 512
-#define SCH_MAX_PROBE_RESP_SIZE 512
+#define SCH_MAX_PROBE_RESP_SIZE 2048
struct schMisc {
diff --git a/CORE/MAC/src/pe/lim/limSendManagementFrames.c b/CORE/MAC/src/pe/lim/limSendManagementFrames.c
index 24b04de..294735f 100644
--- a/CORE/MAC/src/pe/lim/limSendManagementFrames.c
+++ b/CORE/MAC/src/pe/lim/limSendManagementFrames.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011-2017 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -871,7 +871,7 @@
return;
}
if (addnIE1Len <= WNI_CFG_PROBE_RSP_ADDNIE_DATA1_LEN && addnIE1Len &&
- (nBytes + addnIE1Len) <= SIR_MAX_PACKET_SIZE)
+ (nBytes + addnIE1Len) <= SCH_MAX_PROBE_RESP_SIZE)
{
if ( eSIR_SUCCESS != wlan_cfgGetStr(pMac,
WNI_CFG_PROBE_RSP_ADDNIE_DATA1, &addIE[0],
@@ -895,7 +895,7 @@
return;
}
if (addnIE2Len <= WNI_CFG_PROBE_RSP_ADDNIE_DATA2_LEN && addnIE2Len &&
- (nBytes + addnIE2Len) <= SIR_MAX_PACKET_SIZE)
+ (nBytes + addnIE2Len) <= SCH_MAX_PROBE_RESP_SIZE)
{
if ( eSIR_SUCCESS != wlan_cfgGetStr(pMac,
WNI_CFG_PROBE_RSP_ADDNIE_DATA2, &addIE[addnIE1Len],
@@ -919,7 +919,7 @@
return;
}
if (addnIE3Len <= WNI_CFG_PROBE_RSP_ADDNIE_DATA3_LEN && addnIE3Len &&
- (nBytes + addnIE3Len) <= SIR_MAX_PACKET_SIZE)
+ (nBytes + addnIE3Len) <= SCH_MAX_PROBE_RESP_SIZE)
{
if ( eSIR_SUCCESS != wlan_cfgGetStr(pMac,
WNI_CFG_PROBE_RSP_ADDNIE_DATA3,
diff --git a/CORE/MAC/src/pe/sch/schApi.c b/CORE/MAC/src/pe/sch/schApi.c
index 6357be7..a19ff22 100644
--- a/CORE/MAC/src/pe/sch/schApi.c
+++ b/CORE/MAC/src/pe/sch/schApi.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2017 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -456,7 +456,7 @@
}
if (addnIE1Len && addnIE1Len <= WNI_CFG_PROBE_RSP_ADDNIE_DATA1_LEN &&
- (nBytes + addnIE1Len) <= SIR_MAX_PACKET_SIZE)
+ (nBytes + addnIE1Len) <= SCH_MAX_PROBE_RESP_SIZE)
{
if ( eSIR_SUCCESS != wlan_cfgGetStr(pMac,
WNI_CFG_PROBE_RSP_ADDNIE_DATA1, &addIE[0],
@@ -470,7 +470,7 @@
}
if (addnIE2Len && addnIE2Len <= WNI_CFG_PROBE_RSP_ADDNIE_DATA2_LEN &&
- (nBytes + addnIE1Len + addnIE2Len) <= SIR_MAX_PACKET_SIZE)
+ (nBytes + addnIE1Len + addnIE2Len) <= SCH_MAX_PROBE_RESP_SIZE)
{
if ( eSIR_SUCCESS != wlan_cfgGetStr(pMac,
WNI_CFG_PROBE_RSP_ADDNIE_DATA2,
@@ -485,7 +485,7 @@
}
if (addnIE3Len && addnIE3Len <= WNI_CFG_PROBE_RSP_ADDNIE_DATA3_LEN &&
- (nBytes + totalAddnIeLen) <= SIR_MAX_PACKET_SIZE)
+ (nBytes + totalAddnIeLen) <= SCH_MAX_PROBE_RESP_SIZE)
{
if ( eSIR_SUCCESS != wlan_cfgGetStr(pMac,
WNI_CFG_PROBE_RSP_ADDNIE_DATA3,
@@ -503,7 +503,7 @@
if (addnIEPresent)
{
- if ((nBytes + totalAddnIeLen) <= SIR_MAX_PACKET_SIZE )
+ if ((nBytes + totalAddnIeLen) <= SCH_MAX_PROBE_RESP_SIZE)
nBytes += totalAddnIeLen;
else
addnIEPresent = false; //Dont include the IE.
diff --git a/CORE/WDA/src/wlan_qct_wda.c b/CORE/WDA/src/wlan_qct_wda.c
index 9575cd3..d991cf2 100644
--- a/CORE/WDA/src/wlan_qct_wda.c
+++ b/CORE/WDA/src/wlan_qct_wda.c
@@ -8611,9 +8611,18 @@
WDI_Status status = WDI_STATUS_SUCCESS ;
WDI_SendBeaconParamsType wdiSendBeaconReqParam;
VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
+ "------> %s beaconLength %d" ,
+ __func__, pSendbeaconParams->beaconLength);
vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
pSendbeaconParams->bssId, sizeof(tSirMacAddr));
+
+ if (pSendbeaconParams->beaconLength > WDI_BEACON_TEMPLATE_SIZE) {
+ VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: length %d greater than WDI_BEACON_TEMPLATE_SIZE" ,
+ __func__, pSendbeaconParams->beaconLength);
+ VOS_ASSERT(0);
+ pSendbeaconParams->beaconLength = WDI_BEACON_TEMPLATE_SIZE;
+ }
wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
pSendbeaconParams->beaconLength;
wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
@@ -8668,8 +8677,9 @@
WDI_Status status = WDI_STATUS_SUCCESS;
WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
- VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
- "------> %s " ,__func__);
+ VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ "------> %s probeRespTemplateLen %d" ,__func__,
+ pSendProbeRspParams->probeRespTemplateLen);
if (!wdiSendProbeRspParam)
{