ACPI: LPIT: Avoid u32 multiplication overflow
authorNikita Kiryushin <kiryushin@ancud.ru>
Thu, 9 Nov 2023 18:08:59 +0000 (21:08 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 25 Jan 2024 23:35:14 +0000 (15:35 -0800)
[ Upstream commit 56d2eeda87995245300836ee4dbd13b002311782 ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/acpi/acpi_lpit.c

index c5598b6..794962c 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;