ACPI: LPIT: Avoid u32 multiplication overflow
authorNikita Kiryushin <kiryushin@ancud.ru>
Thu, 9 Nov 2023 18:08:59 +0000 (21:08 +0300)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 22 Nov 2023 19:55:20 +0000 (20:55 +0100)
In lpit_update_residency() there is a possibility of overflow
in multiplication, if tsc_khz is large enough (> UINT_MAX/1000).

Change multiplication to mul_u32_u32().

Found by Linux Verification Center (linuxtesting.org) with SVACE.

Fixes: eeb2d80d502a ("ACPI / LPIT: Add Low Power Idle Table (LPIT) support")
Signed-off-by: Nikita Kiryushin <kiryushin@ancud.ru>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/acpi_lpit.c

index c5598b6d5db8b0c8154e804a68d1ee2a45bc5323..794962c5c88e95656175c5fea743a5c4d2ffaa4f 100644 (file)
@@ -105,7 +105,7 @@ static void lpit_update_residency(struct lpit_residency_info *info,
                return;
 
        info->frequency = lpit_native->counter_frequency ?
-                               lpit_native->counter_frequency : tsc_khz * 1000;
+                               lpit_native->counter_frequency : mul_u32_u32(tsc_khz, 1000U);
        if (!info->frequency)
                info->frequency = 1;