From b368da61bc36d74df91fc3e005fffc6ed1c5523d Mon Sep 17 00:00:00 2001 From: gaurank kathpalia Date: Mon, 27 Nov 2017 14:40:58 +0530 Subject: [PATCH] wlan: Fix Out-of-bound access in sapInterferenceRssiCount Fix Out-of-bound access in sapInterferenceRssiCount, by checking the limit of start address for channel info and end address for channel info. Change-Id: If21e09d0f11bd655a8e04139ccf55d3682734b17 CRs-Fixed: 2149350 --- .../staging/prima/CORE/SAP/src/sapChSelect.c | 274 +++++++++++++----- 1 file changed, 206 insertions(+), 68 deletions(-) diff --git a/drivers/staging/prima/CORE/SAP/src/sapChSelect.c b/drivers/staging/prima/CORE/SAP/src/sapChSelect.c index 643417b856b..a6028c7d629 100644 --- a/drivers/staging/prima/CORE/SAP/src/sapChSelect.c +++ b/drivers/staging/prima/CORE/SAP/src/sapChSelect.c @@ -580,7 +580,9 @@ v_U32_t sapweightRssiCount(v_S7_t rssi, v_U16_t count) SIDE EFFECTS ============================================================================*/ -void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) +void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh, + tSapSpectChInfo *spect_ch_strt_addr, + tSapSpectChInfo *spect_ch_end_addr) { tSapSpectChInfo *pExtSpectCh = NULL; v_S31_t rssi; @@ -596,7 +598,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) { case CHANNEL_1: pExtSpectCh = (pSpectCh + 1); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -609,7 +613,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh + 2); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -622,7 +628,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh + 3); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -635,7 +643,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh + 4); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -651,7 +661,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) case CHANNEL_2: pExtSpectCh = (pSpectCh - 1); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -664,7 +676,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh + 1); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -677,7 +691,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh + 2); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -690,7 +706,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh + 3); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -703,7 +721,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh + 4); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -718,7 +738,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) break; case CHANNEL_3: pExtSpectCh = (pSpectCh - 2); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -731,7 +753,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh - 1); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -744,7 +768,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh + 1); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -757,7 +783,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh + 2); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -770,7 +798,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh + 3); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -783,7 +813,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh + 4); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -798,7 +830,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) break; case CHANNEL_4: pExtSpectCh = (pSpectCh - 3); - if(pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -811,7 +845,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh - 2); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -824,7 +860,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh - 1); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -837,7 +875,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh + 1); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -850,7 +890,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh + 2); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -863,7 +905,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh + 3); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -876,7 +920,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh + 4); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -894,7 +940,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) case CHANNEL_6: case CHANNEL_7: pExtSpectCh = (pSpectCh - 4); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -907,7 +955,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh - 3); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -920,7 +970,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh - 2); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -933,7 +985,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh - 1); - if(pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -946,7 +1000,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh + 1); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -959,7 +1015,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh + 2); - if(pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -972,7 +1030,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh + 3); - if(pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -985,7 +1045,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh + 4); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -1001,7 +1063,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) case CHANNEL_8: pExtSpectCh = (pSpectCh - 4); - if(pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -1015,7 +1079,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) } pExtSpectCh = (pSpectCh - 3); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -1028,7 +1094,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh - 2); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -1041,7 +1109,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh - 1); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -1054,7 +1124,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh + 1); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -1067,7 +1139,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh + 2); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -1080,7 +1154,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh + 3); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -1096,7 +1172,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) case CHANNEL_9: pExtSpectCh = (pSpectCh - 4); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -1110,7 +1188,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) } pExtSpectCh = (pSpectCh - 3); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -1123,7 +1203,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh - 2); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -1136,7 +1218,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh - 1); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -1149,7 +1233,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh + 1); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -1162,7 +1248,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh + 2); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -1178,7 +1266,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) case CHANNEL_10: pExtSpectCh = (pSpectCh - 4); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -1192,7 +1282,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) } pExtSpectCh = (pSpectCh - 3); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -1205,7 +1297,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh - 2); - if(pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -1218,7 +1312,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh - 1); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -1231,7 +1327,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh + 1); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -1247,7 +1345,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) case CHANNEL_11: pExtSpectCh = (pSpectCh - 1); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -1260,7 +1360,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh - 2); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -1273,7 +1375,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh - 3); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -1286,7 +1390,9 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh) pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh - 4); - if (pExtSpectCh != NULL) + if (pExtSpectCh != NULL && + (pExtSpectCh >= spect_ch_strt_addr && + pExtSpectCh < spect_ch_end_addr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + @@ -1345,6 +1451,9 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams, v_U32_t ieLen = 0; tSirProbeRespBeacon *pBeaconStruct; tpAniSirGlobal pMac = (tpAniSirGlobal) halHandle; + tSapSpectChInfo *pSpectChStartAddr = pSpectInfoParams->pSpectCh; + tSapSpectChInfo *pSpectChEndAddr = + pSpectInfoParams->pSpectCh + pSpectInfoParams->numSpectChans; pBeaconStruct = vos_mem_malloc(sizeof(tSirProbeRespBeacon)); if ( NULL == pBeaconStruct ) @@ -1428,7 +1537,9 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams, tSapSpectChInfo *pExtSpectCh = NULL; case PHY_DOUBLE_CHANNEL_LOW_PRIMARY: // Above the Primary Channel pExtSpectCh = (pSpectCh + 1); - if(pExtSpectCh != NULL) + if( pExtSpectCh != NULL && + (pExtSpectCh >= pSpectChStartAddr && + pExtSpectCh < pSpectChEndAddr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + SAP_SUBBAND1_RSSI_EFFECT_PRIMARY; @@ -1444,7 +1555,9 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams, case PHY_DOUBLE_CHANNEL_HIGH_PRIMARY: // Below the Primary channel pExtSpectCh = (pSpectCh - 1); - if(pExtSpectCh != NULL) + if( pExtSpectCh != NULL && + (pExtSpectCh >= pSpectChStartAddr && + pExtSpectCh < pSpectChEndAddr)) { rssi = pSpectCh->rssiAgr + SAP_SUBBAND1_RSSI_EFFECT_PRIMARY; if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi)) @@ -1463,7 +1576,9 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams, { tSapSpectChInfo *pExtSpectCh = NULL; pExtSpectCh = (pSpectCh + 1); - if(pExtSpectCh != NULL) + if( pExtSpectCh != NULL && + (pExtSpectCh >= pSpectChStartAddr && + pExtSpectCh < pSpectChEndAddr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + SAP_SUBBAND1_RSSI_EFFECT_PRIMARY; @@ -1475,7 +1590,9 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams, pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh + 2); - if(pExtSpectCh != NULL) + if( pExtSpectCh != NULL && + (pExtSpectCh >= pSpectChStartAddr && + pExtSpectCh < pSpectChEndAddr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + SAP_SUBBAND2_RSSI_EFFECT_PRIMARY; @@ -1487,7 +1604,9 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams, pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh + 3); - if(pExtSpectCh != NULL) + if( pExtSpectCh != NULL && + (pExtSpectCh >= pSpectChStartAddr && + pExtSpectCh < pSpectChEndAddr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + SAP_SUBBAND3_RSSI_EFFECT_PRIMARY; @@ -1503,7 +1622,9 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams, { tSapSpectChInfo *pExtSpectCh = NULL; pExtSpectCh = (pSpectCh - 1 ); - if(pExtSpectCh != NULL) + if( pExtSpectCh != NULL && + (pExtSpectCh >= pSpectChStartAddr && + pExtSpectCh < pSpectChEndAddr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + SAP_SUBBAND1_RSSI_EFFECT_PRIMARY; @@ -1515,7 +1636,9 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams, pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh + 1); - if(pExtSpectCh != NULL) + if( pExtSpectCh != NULL && + (pExtSpectCh >= pSpectChStartAddr && + pExtSpectCh < pSpectChEndAddr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + SAP_SUBBAND1_RSSI_EFFECT_PRIMARY; @@ -1527,7 +1650,9 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams, pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh + 2); - if(pExtSpectCh != NULL) + if( pExtSpectCh != NULL && + (pExtSpectCh >= pSpectChStartAddr && + pExtSpectCh < pSpectChEndAddr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + SAP_SUBBAND2_RSSI_EFFECT_PRIMARY; @@ -1543,7 +1668,9 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams, { tSapSpectChInfo *pExtSpectCh = NULL; pExtSpectCh = (pSpectCh - 1 ); - if(pExtSpectCh != NULL) + if( pExtSpectCh != NULL && + (pExtSpectCh >= pSpectChStartAddr && + pExtSpectCh < pSpectChEndAddr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + SAP_SUBBAND1_RSSI_EFFECT_PRIMARY; @@ -1555,7 +1682,9 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams, pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh - 2); - if(pExtSpectCh != NULL) + if( pExtSpectCh != NULL && + (pExtSpectCh >= pSpectChStartAddr && + pExtSpectCh < pSpectChEndAddr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + SAP_SUBBAND2_RSSI_EFFECT_PRIMARY; @@ -1567,7 +1696,9 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams, pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh + 1); - if(pExtSpectCh != NULL) + if( pExtSpectCh != NULL && + (pExtSpectCh >= pSpectChStartAddr && + pExtSpectCh < pSpectChEndAddr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + SAP_SUBBAND1_RSSI_EFFECT_PRIMARY; @@ -1583,7 +1714,9 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams, { tSapSpectChInfo *pExtSpectCh = NULL; pExtSpectCh = (pSpectCh - 1 ); - if(pExtSpectCh != NULL) + if( pExtSpectCh != NULL && + (pExtSpectCh >= pSpectChStartAddr && + pExtSpectCh < pSpectChEndAddr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + SAP_SUBBAND1_RSSI_EFFECT_PRIMARY; @@ -1595,7 +1728,9 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams, pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh - 2); - if(pExtSpectCh != NULL) + if( pExtSpectCh != NULL && + (pExtSpectCh >= pSpectChStartAddr && + pExtSpectCh < pSpectChEndAddr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + SAP_SUBBAND2_RSSI_EFFECT_PRIMARY; @@ -1607,7 +1742,9 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams, pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI; } pExtSpectCh = (pSpectCh - 3); - if(pExtSpectCh != NULL) + if( pExtSpectCh != NULL && + (pExtSpectCh >= pSpectChStartAddr && + pExtSpectCh < pSpectChEndAddr)) { ++pExtSpectCh->bssCount; rssi = pSpectCh->rssiAgr + SAP_SUBBAND3_RSSI_EFFECT_PRIMARY; @@ -1624,7 +1761,8 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams, } else if(operatingBand == eSAP_RF_SUBBAND_2_4_GHZ) { - sapInterferenceRssiCount(pSpectCh); + sapInterferenceRssiCount(pSpectCh, pSpectChStartAddr, + pSpectChEndAddr); } VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,