diff --git a/core/wma/inc/wma_internal.h b/core/wma/inc/wma_internal.h index 356a6fb839e6..cb8e1c0c1d45 100644 --- a/core/wma/inc/wma_internal.h +++ b/core/wma/inc/wma_internal.h @@ -118,6 +118,9 @@ /* Time(in ms) to detect DOS attack */ #define WMA_MGMT_FRAME_DETECT_DOS_TIMER 1000 +#define MAX_NUM_HW_MODE 0xff +#define MAX_NUM_PHY 0xff + /** * struct index_data_rate_type - non vht data rate type * @mcs_index: mcs rate index diff --git a/core/wma/src/wma_main.c b/core/wma/src/wma_main.c index 89a16494e3be..a38ec6f60f27 100644 --- a/core/wma/src/wma_main.c +++ b/core/wma/src/wma_main.c @@ -5807,6 +5807,13 @@ static void wma_populate_soc_caps(t_wma_handle *wma_handle, return; } + if (param_buf->soc_hw_mode_caps->num_hw_modes > + MAX_NUM_HW_MODE) { + WMA_LOGE("Invalid num_hw_modes %u received from firmware", + param_buf->soc_hw_mode_caps->num_hw_modes); + return; + } + qdf_mem_copy(&phy_caps->num_hw_modes, param_buf->soc_hw_mode_caps, sizeof(WMI_SOC_MAC_PHY_HW_MODE_CAPS)); @@ -5881,6 +5888,14 @@ static void wma_populate_soc_caps(t_wma_handle *wma_handle, /* * next thing is to populate reg caps per phy */ + + if (param_buf->soc_hal_reg_caps->num_phy > + MAX_NUM_PHY) { + WMA_LOGE("Invalid num_phy %u received from firmware", + param_buf->soc_hal_reg_caps->num_phy); + return; + } + qdf_mem_copy(&phy_caps->num_phy_for_hal_reg_cap, param_buf->soc_hal_reg_caps, sizeof(WMI_SOC_HAL_REG_CAPABILITIES));