diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c index 0f42a09348e9..2e135f26a825 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/core/hdd/src/wlan_hdd_cfg.c @@ -4441,12 +4441,23 @@ static QDF_STATUS hdd_cfg_get_config(struct reg_table_entry *reg_table, (WLAN_PARAM_SignedInteger == pRegEntry->RegType) || (WLAN_PARAM_HexInteger == pRegEntry->RegType)) { value = 0; + + if ((pRegEntry->VarSize > sizeof(value)) || + (pRegEntry->VarSize == 0)) { + pr_warn("Invalid length of %s: %d", + pRegEntry->RegName, pRegEntry->VarSize); + continue; + } + memcpy(&value, pField, pRegEntry->VarSize); if (WLAN_PARAM_HexInteger == pRegEntry->RegType) { fmt = "%x"; } else if (WLAN_PARAM_SignedInteger == pRegEntry->RegType) { fmt = "%d"; + value = sign_extend32( + value, + pRegEntry->VarSize * 8 - 1); } else { fmt = "%u"; }