Nico Huber has submitted this change. ( https://review.coreboot.org/c/coreboot/+/83736?usp=email )
Change subject: mb/dell/optiplex_9020: Fix UB in package power calculation ......................................................................
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 --- M src/mainboard/dell/optiplex_9020/mainboard.c 1 file changed, 3 insertions(+), 5 deletions(-)
Approvals: build bot (Jenkins): Verified Angel Pons: Looks good to me, approved Elyes Haouas: Looks good to me, approved Nico Huber: Looks good to me, approved
diff --git a/src/mainboard/dell/optiplex_9020/mainboard.c b/src/mainboard/dell/optiplex_9020/mainboard.c index 6630a12..1cb850c4 100644 --- a/src/mainboard/dell/optiplex_9020/mainboard.c +++ b/src/mainboard/dell/optiplex_9020/mainboard.c @@ -303,11 +303,9 @@
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;