Commit e5d1c872 authored by Nikita Zhandarovich's avatar Nikita Zhandarovich Committed by Rafael J. Wysocki

PM: domains: fix integer overflow issues in genpd_parse_state()

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: 30f60428 ("PM / Domains: Allow domain power states to be read from DT")
Signed-off-by: default avatarNikita Zhandarovich <n.zhandarovich@fintech.ru>
Acked-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 44c026a7
...@@ -2939,10 +2939,10 @@ static int genpd_parse_state(struct genpd_power_state *genpd_state, ...@@ -2939,10 +2939,10 @@ static int genpd_parse_state(struct genpd_power_state *genpd_state,
err = of_property_read_u32(state_node, "min-residency-us", &residency); err = of_property_read_u32(state_node, "min-residency-us", &residency);
if (!err) 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_on_latency_ns = 1000LL * exit_latency;
genpd_state->power_off_latency_ns = 1000 * entry_latency; genpd_state->power_off_latency_ns = 1000LL * entry_latency;
genpd_state->fwnode = &state_node->fwnode; genpd_state->fwnode = &state_node->fwnode;
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment