diff --git a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_assoc.c b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_assoc.c index e52af45b96d..737635d801a 100644 --- a/drivers/staging/prima/CORE/HDD/src/wlan_hdd_assoc.c +++ b/drivers/staging/prima/CORE/HDD/src/wlan_hdd_assoc.c @@ -1484,8 +1484,10 @@ static void hdd_SendReAssocEvent(struct net_device *dev, hdd_adapter_t *pAdapter goto done; } - if (pCsrRoamInfo->nAssocRspLength == 0) { - hddLog(LOGE, "%s: Invalid assoc response length", __func__); + if (pCsrRoamInfo->nAssocRspLength < FT_ASSOC_RSP_IES_OFFSET) { + + hddLog(LOGE, "%s: Invalid assoc response length %d", + __func__, pCsrRoamInfo->nAssocRspLength); goto done; } @@ -1502,6 +1504,11 @@ static void hdd_SendReAssocEvent(struct net_device *dev, hdd_adapter_t *pAdapter // Send the Assoc Resp, the supplicant needs this for initial Auth. len = pCsrRoamInfo->nAssocRspLength - FT_ASSOC_RSP_IES_OFFSET; + if (len > IW_GENERIC_IE_MAX) { + hddLog(LOGE, "%s: Invalid assoc response length %d", + __func__, pCsrRoamInfo->nAssocRspLength); + goto done; + } rspRsnLength = len; memcpy(rspRsnIe, pFTAssocRsp, len); memset(rspRsnIe + len, 0, IW_GENERIC_IE_MAX - len);