]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
PM: domains: fix integer overflow issues in genpd_parse_state()
authorNikita Zhandarovich <n.zhandarovich@fintech.ru>
Tue, 18 Apr 2023 13:07:43 +0000 (06:07 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 11 Aug 2023 09:33:33 +0000 (11:33 +0200)
[ Upstream commit e5d1c8722083f0332dcd3c85fa1273d85fb6bed8 ]

Currently, while calculating residency and latency values, right
operands may overflow if resulting values are big enough.

To prevent this, albeit unlikely case, play it safe and convert
right operands to left ones' type s64.

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

Fixes: 30f604283e05 ("PM / Domains: Allow domain power states to be read from DT")
Signed-off-by: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
Acked-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/base/power/domain.c

index a64b093a88cf4641c38b340d47680f81cf97e029..0f38df5856e120d7a78e2dd4389e77b34da68453 100644 (file)
@@ -2206,10 +2206,10 @@ static int genpd_parse_state(struct genpd_power_state *genpd_state,
 
        err = of_property_read_u32(state_node, "min-residency-us", &residency);
        if (!err)
-               genpd_state->residency_ns = 1000 * residency;
+               genpd_state->residency_ns = 1000LL * residency;
 
-       genpd_state->power_on_latency_ns = 1000 * exit_latency;
-       genpd_state->power_off_latency_ns = 1000 * entry_latency;
+       genpd_state->power_on_latency_ns = 1000LL * exit_latency;
+       genpd_state->power_off_latency_ns = 1000LL * entry_latency;
        genpd_state->fwnode = &state_node->fwnode;
 
        return 0;