soc/intel/{broad,cannon,sky}: Fix possible out-of-bounds reads
There will be a possible out of bounds array access if
power_limit_1_time == ARRAY_SIZE(power_limit_time_sec_to_msr), so
prevent that in the index check. This issue was fixed for other cpus in
commit 5cfef13f8d
(cpu/intel: Fix out-of-bounds read due to off-by-one
in condition). Based on the discussion for that commit, also remove the
magic constant 28 in favour of the index of the last array element.
Change-Id: Ic3f8735b23a368f8a9395757bd52c2c40088afa1
Signed-off-by: Jacob Garber <jgarber1@ualberta.ca>
Found-by: Coverity CID 1229673
Reviewed-on: https://review.coreboot.org/c/coreboot/+/34498
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Patrick Rudolph <siro@das-labor.org>
This commit is contained in:
parent
4926e989ac
commit
bcdb893778
|
@ -324,8 +324,8 @@ void set_power_limits(u8 power_limit_1_time)
|
||||||
unsigned int tdp, min_power, max_power, max_time;
|
unsigned int tdp, min_power, max_power, max_time;
|
||||||
u8 power_limit_1_val;
|
u8 power_limit_1_val;
|
||||||
|
|
||||||
if (power_limit_1_time > ARRAY_SIZE(power_limit_time_sec_to_msr))
|
if (power_limit_1_time >= ARRAY_SIZE(power_limit_time_sec_to_msr))
|
||||||
power_limit_1_time = 28;
|
power_limit_1_time = ARRAY_SIZE(power_limit_time_sec_to_msr) - 1;
|
||||||
|
|
||||||
if (!(msr.lo & PLATFORM_INFO_SET_TDP))
|
if (!(msr.lo & PLATFORM_INFO_SET_TDP))
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -108,8 +108,8 @@ void set_power_limits(u8 power_limit_1_time)
|
||||||
|
|
||||||
config_t *conf = config_of_path(SA_DEVFN_ROOT);
|
config_t *conf = config_of_path(SA_DEVFN_ROOT);
|
||||||
|
|
||||||
if (power_limit_1_time > ARRAY_SIZE(power_limit_time_sec_to_msr))
|
if (power_limit_1_time >= ARRAY_SIZE(power_limit_time_sec_to_msr))
|
||||||
power_limit_1_time = 28;
|
power_limit_1_time = ARRAY_SIZE(power_limit_time_sec_to_msr) - 1;
|
||||||
|
|
||||||
if (!(msr.lo & PLATFORM_INFO_SET_TDP))
|
if (!(msr.lo & PLATFORM_INFO_SET_TDP))
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -119,8 +119,8 @@ void set_power_limits(u8 power_limit_1_time)
|
||||||
|
|
||||||
config_t *conf = config_of_path(SA_DEVFN_ROOT);
|
config_t *conf = config_of_path(SA_DEVFN_ROOT);
|
||||||
|
|
||||||
if (power_limit_1_time > ARRAY_SIZE(power_limit_time_sec_to_msr))
|
if (power_limit_1_time >= ARRAY_SIZE(power_limit_time_sec_to_msr))
|
||||||
power_limit_1_time = 28;
|
power_limit_1_time = ARRAY_SIZE(power_limit_time_sec_to_msr) - 1;
|
||||||
|
|
||||||
if (!(msr.lo & PLATFORM_INFO_SET_TDP))
|
if (!(msr.lo & PLATFORM_INFO_SET_TDP))
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in New Issue