1
0

qcacld-3.0: Fix OOB write in wma_extscan_change_results_event_handler

The routine wma_extscan_change_results_event_handler sends the ext scan
results to upper layers. This contains the bssid info, rssi values of
different APs that are scanner. If the num_rssi_samples is negative or
greater than UINT32_MAX,then an OOB write could happen.

Add check to ensure rssi_num is not negative or exceeds UINT32_MAX.
Also make sure the numap value is not negative.

Change-Id: If82c4fd1193c45d38bd4495c187a406deb25acad
CRs-Fixed: 2205957
Este cometimento está contido em:
Pragaspathi Thilagaraj
2018-04-04 23:08:48 +05:30
cometido por nshrivas
ascendente fb410619e0
cometimento e8f5b1d4bc

Ver ficheiro

@@ -4147,12 +4147,12 @@ int wma_extscan_change_results_event_handler(void *handle,
tSirWifiSignificantChange *dest_ap;
wmi_extscan_wlan_change_result_bssid *src_chglist;
int numap;
uint32_t numap;
int i, k;
uint8_t *src_rssi;
int count = 0;
int moredata;
int rssi_num = 0;
uint32_t rssi_num = 0;
tpAniSirGlobal pMac = cds_get_context(QDF_MODULE_ID_PE);
uint32_t buf_len;
bool excess_data = false;
@@ -4184,8 +4184,17 @@ int wma_extscan_change_results_event_handler(void *handle,
WMA_LOGE("%s: Invalid num of entries in page: %d", __func__, numap);
return -EINVAL;
}
for (i = 0; i < numap; i++)
for (i = 0; i < numap; i++) {
if (src_chglist->num_rssi_samples > (UINT_MAX - rssi_num)) {
WMA_LOGE("%s: Invalid num of rssi samples %d numap %d rssi_num %d",
__func__, src_chglist->num_rssi_samples,
numap, rssi_num);
return -EINVAL;
}
rssi_num += src_chglist->num_rssi_samples;
src_chglist++;
}
src_chglist = param_buf->bssid_signal_descriptor_list;
if (event->first_entry_index +
event->num_entries_in_page < event->total_entries) {