qcacld-3.0: Add bound check for fixed_param->total_num_tx_power_levels
Add bound check for new fixed_param->total_num_tx_power_levels with its old value of rs_results->total_num_tx_power_levels in wma_unified_radio_tx_power_level_stats_event_handler. rs_results->tx_time_per_power_level is allocated only once if it has not been already allocated.This allocation is saved into the global wma_handle structure. If multiple invocations of this handler occur then a buffer overflow can occur in the following scenario: 1. First message is used to allocate rs_results->tx_time_per_power_level with a small, but valid size. 2. Second message skips allocation of rs_results->tx_time_per_power_level since it was done with the first message. This message specifies a larger valid value and causes the qdf_mem_copy() to overflow. Change-Id: Ib9c7d3bd667e2ffc1408cd7356be35985331e028 CRs-Fixed: 2327688
This commit is contained in:

committed by
nshrivas

parent
33cd663fc9
commit
66dfa5cfed
@@ -1524,6 +1524,14 @@ static int wma_unified_radio_tx_power_level_stats_event_handler(void *handle,
|
|||||||
fixed_param->radio_id;
|
fixed_param->radio_id;
|
||||||
tx_power_level_values = (uint8_t *) param_tlvs->tx_time_per_power_level;
|
tx_power_level_values = (uint8_t *) param_tlvs->tx_time_per_power_level;
|
||||||
|
|
||||||
|
if (fixed_param->total_num_tx_power_levels >
|
||||||
|
rs_results->total_num_tx_power_levels) {
|
||||||
|
WMA_LOGE("%s: excess tx_power buffers:%d, total_num_tx_power_levels:%d",
|
||||||
|
__func__, fixed_param->total_num_tx_power_levels,
|
||||||
|
rs_results->total_num_tx_power_levels);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
rs_results->total_num_tx_power_levels =
|
rs_results->total_num_tx_power_levels =
|
||||||
fixed_param->total_num_tx_power_levels;
|
fixed_param->total_num_tx_power_levels;
|
||||||
if (!rs_results->total_num_tx_power_levels) {
|
if (!rs_results->total_num_tx_power_levels) {
|
||||||
|
Reference in New Issue
Block a user