qcacld-3.0: Validate pProfile before dereferencing it
Add sanity check for pProfile pointer before dereferencing it in csr api. Change-Id: I7290a46aea92f0c77c1123143c994cc684e26744 CRs-Fixed: 2775360
This commit is contained in:

committed by
snandini

parent
a91c6c1f4b
commit
ed26554eea
@@ -1911,6 +1911,11 @@ bool csr_is_phy_mode_match(struct mac_context *mac, uint32_t phyMode,
|
|||||||
uint32_t bitMask, loopCount;
|
uint32_t bitMask, loopCount;
|
||||||
uint32_t bss_chan_freq;
|
uint32_t bss_chan_freq;
|
||||||
|
|
||||||
|
if (!pProfile) {
|
||||||
|
sme_err("profile not found");
|
||||||
|
return fMatch;
|
||||||
|
}
|
||||||
|
|
||||||
if (!QDF_IS_STATUS_SUCCESS(csr_get_phy_mode_from_bss(mac, pSirBssDesc,
|
if (!QDF_IS_STATUS_SUCCESS(csr_get_phy_mode_from_bss(mac, pSirBssDesc,
|
||||||
&phyModeInBssDesc, pIes)))
|
&phyModeInBssDesc, pIes)))
|
||||||
return fMatch;
|
return fMatch;
|
||||||
@@ -1973,30 +1978,28 @@ bool csr_is_phy_mode_match(struct mac_context *mac, uint32_t phyMode,
|
|||||||
cfgDot11ModeToUse = csr_get_vdev_dot11_mode(mac, pProfile->csrPersona,
|
cfgDot11ModeToUse = csr_get_vdev_dot11_mode(mac, pProfile->csrPersona,
|
||||||
cfgDot11ModeToUse);
|
cfgDot11ModeToUse);
|
||||||
if (fMatch && pReturnCfgDot11Mode) {
|
if (fMatch && pReturnCfgDot11Mode) {
|
||||||
if (pProfile) {
|
/*
|
||||||
/*
|
* IEEE 11n spec (8.4.3): HT STA shall
|
||||||
* IEEE 11n spec (8.4.3): HT STA shall
|
* eliminate TKIP as a choice for the pairwise
|
||||||
* eliminate TKIP as a choice for the pairwise
|
* cipher suite if CCMP is advertised by the AP
|
||||||
* cipher suite if CCMP is advertised by the AP
|
* or if the AP included an HT capabilities
|
||||||
* or if the AP included an HT capabilities
|
* element in its Beacons and Probe Response.
|
||||||
* element in its Beacons and Probe Response.
|
*/
|
||||||
*/
|
if ((!CSR_IS_11n_ALLOWED(
|
||||||
if ((!CSR_IS_11n_ALLOWED(
|
pProfile->negotiatedUCEncryptionType))
|
||||||
pProfile->negotiatedUCEncryptionType))
|
&& ((eCSR_CFG_DOT11_MODE_11N ==
|
||||||
&& ((eCSR_CFG_DOT11_MODE_11N ==
|
cfgDot11ModeToUse) ||
|
||||||
cfgDot11ModeToUse) ||
|
(eCSR_CFG_DOT11_MODE_11AC ==
|
||||||
(eCSR_CFG_DOT11_MODE_11AC ==
|
cfgDot11ModeToUse) ||
|
||||||
cfgDot11ModeToUse) ||
|
(eCSR_CFG_DOT11_MODE_11AX ==
|
||||||
(eCSR_CFG_DOT11_MODE_11AX ==
|
cfgDot11ModeToUse))) {
|
||||||
cfgDot11ModeToUse))) {
|
/* We cannot do 11n here */
|
||||||
/* We cannot do 11n here */
|
if (WLAN_REG_IS_24GHZ_CH_FREQ(bss_chan_freq)) {
|
||||||
if (WLAN_REG_IS_24GHZ_CH_FREQ(bss_chan_freq)) {
|
cfgDot11ModeToUse =
|
||||||
cfgDot11ModeToUse =
|
eCSR_CFG_DOT11_MODE_11G;
|
||||||
eCSR_CFG_DOT11_MODE_11G;
|
} else {
|
||||||
} else {
|
cfgDot11ModeToUse =
|
||||||
cfgDot11ModeToUse =
|
eCSR_CFG_DOT11_MODE_11A;
|
||||||
eCSR_CFG_DOT11_MODE_11A;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*pReturnCfgDot11Mode = cfgDot11ModeToUse;
|
*pReturnCfgDot11Mode = cfgDot11ModeToUse;
|
||||||
|
Reference in New Issue
Block a user