summaryrefslogtreecommitdiff
path: root/src/mainboard
diff options
context:
space:
mode:
authorMate Kukri <km@mkukri.xyz>2024-08-01 19:40:52 +0100
committerNico Huber <nico.h@gmx.de>2024-08-03 14:00:26 +0000
commitac9ffb94324e45ee19e9dcbf2847744992ed572f (patch)
tree4caa1253c163f1f920ab9612d0292d5b2613b6d4 /src/mainboard
parentb256e6303c13abc13825bf2d3fb2fbc2ed1fd788 (diff)
mb/dell/optiplex_9020: Fix UB in package power calculation
Fix potential undefined behaviour in the `get_pkg_power()` function: - If `rapl_power_unit == 0`, `pkg_power_info / rapl_power_unit` is invalid - If `rapl_power_unit > 7`, the result of the shift doesn't fit into a `uint8_t` Signed-off-by: Mate Kukri <km@mkukri.xyz> Change-Id: I48ef59c4fbeb0a55675ac24da31e6e0b194cb58d Reviewed-on: https://review.coreboot.org/c/coreboot/+/83736 Reviewed-by: Angel Pons <th3fanbus@gmail.com> Reviewed-by: Nico Huber <nico.h@gmx.de> Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Elyes Haouas <ehaouas@noos.fr>
Diffstat (limited to 'src/mainboard')
-rw-r--r--src/mainboard/dell/optiplex_9020/mainboard.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/src/mainboard/dell/optiplex_9020/mainboard.c b/src/mainboard/dell/optiplex_9020/mainboard.c
index 6630a12e2a..1cb850c46c 100644
--- a/src/mainboard/dell/optiplex_9020/mainboard.c
+++ b/src/mainboard/dell/optiplex_9020/mainboard.c
@@ -303,11 +303,9 @@ static uint8_t get_temp_target(void)
static uint16_t get_pkg_power(void)
{
- uint8_t rapl_power_unit = rdmsr(0x606).lo & 0xf;
- if (rapl_power_unit)
- rapl_power_unit = 2 << (rapl_power_unit - 1);
- uint16_t pkg_power_info = rdmsr(0x614).lo & 0x7fff;
- if (pkg_power_info / rapl_power_unit > 0x41)
+ const unsigned int pkg_power = rdmsr(0x614).lo & 0x7fff;
+ const unsigned int power_unit = 1 << (rdmsr(0x606).lo & 0xf);
+ if (pkg_power / power_unit > 65)
return 32;
else
return 16;