Messages in this thread | | | From | "Rafael J. Wysocki" <> | Date | Thu, 18 Mar 2021 19:57:14 +0100 | Subject | Re: [PATCH] PM / Domains: Fix integer overflows on u32 bit multiplies |
| |
On Sun, Feb 7, 2021 at 11:47 PM Colin King <colin.king@canonical.com> wrote: > > From: Colin Ian King <colin.king@canonical.com> > > There are three occurrances of u32 variables being multiplied by > 1000 using 32 bit multiplies and the result being assigned to a > 64 bit signed integer. These can potentially lead to a 32 bit > overflows, so fix this by casting 1000 to a UL first to force > a 64 bit multiply hence avoiding the overflow. > > Addresses-Coverity: ("Unintentional integer overflow") > Fixes: 30f604283e05 ("PM / Domains: Allow domain power states to be read from DT") > Signed-off-by: Colin Ian King <colin.king@canonical.com> > --- > drivers/base/power/domain.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c > index aaf6c83b5cf6..ddeff69126ff 100644 > --- a/drivers/base/power/domain.c > +++ b/drivers/base/power/domain.c > @@ -2831,10 +2831,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 = 1000UL * residency;
Wouldn't it be better to use NSEC_PER_USEC here and below?
> > - genpd_state->power_on_latency_ns = 1000 * exit_latency; > - genpd_state->power_off_latency_ns = 1000 * entry_latency; > + genpd_state->power_on_latency_ns = 1000UL * exit_latency; > + genpd_state->power_off_latency_ns = 1000UL * entry_latency; > genpd_state->fwnode = &state_node->fwnode; > > return 0; > -- > 2.29.2 >
| |