Skip to content

Commit 3eb0ba7

Browse files
SevenQCgregkh
authored andcommitted
powercap: intel_rapl: fix UBSAN shift-out-of-bounds issue
[ Upstream commit 2d93540014387d1c73b9ccc4d7895320df66d01b ] When value < time_unit, the parameter of ilog2() will be zero and the return value is -1. u64(-1) is too large for shift exponent and then will trigger shift-out-of-bounds: shift exponent 18446744073709551615 is too large for 32-bit type 'int' Call Trace: rapl_compute_time_window_core rapl_write_data_raw set_time_window store_constraint_time_window_us Signed-off-by: Chao Qin <[email protected]> Acked-by: Zhang Rui <[email protected]> Signed-off-by: Rafael J. Wysocki <[email protected]> Signed-off-by: Sasha Levin <[email protected]>
1 parent d6ab85b commit 3eb0ba7

File tree

1 file changed

+3
-0
lines changed

1 file changed

+3
-0
lines changed

drivers/powercap/intel_rapl.c

+3
Original file line numberDiff line numberDiff line change
@@ -1066,6 +1066,9 @@ static u64 rapl_compute_time_window_core(struct rapl_package *rp, u64 value,
10661066
y = value & 0x1f;
10671067
value = (1 << y) * (4 + f) * rp->time_unit / 4;
10681068
} else {
1069+
if (value < rp->time_unit)
1070+
return 0;
1071+
10691072
do_div(value, rp->time_unit);
10701073
y = ilog2(value);
10711074
f = div64_u64(4 * (value - (1 << y)), 1 << y);

0 commit comments

Comments
 (0)