On Mon, Jun 21, 2021 at 12:14:07AM +0300, Dmitry Osipenko wrote: > The minimum temperature value that is passed to the driver is unlimited > and value that is close to INT_MIN results in integer overflow of > temperature calculations made by the driver. Limit the value in order > to prevent the overflow. For now the overflow condition is harmless, > but thermal framework won't work properly once we will support the > set_trips() callback because it will pass INT_MIN value to the driver. > AFAICS that should only happen for lm99 because all other values are bound in the temp_to_xxx functions. Where else do you see an overflow (or underflow) ? Thanks, Guenter > Signed-off-by: Dmitry Osipenko <digetx@xxxxxxxxx> > --- > drivers/hwmon/lm90.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/drivers/hwmon/lm90.c b/drivers/hwmon/lm90.c > index b53f17511b05..6e2fa976098f 100644 > --- a/drivers/hwmon/lm90.c > +++ b/drivers/hwmon/lm90.c > @@ -1028,6 +1028,9 @@ static int lm90_set_temp11(struct lm90_data *data, int index, long val) > struct reg *regp = ®[index]; > int err; > > + /* prevent integer overflow */ > + val = max(val, -128000l); > + > /* +16 degrees offset for temp2 for the LM99 */ > if (data->kind == lm99 && index <= 2) > val -= 16000; > @@ -1088,6 +1091,9 @@ static int lm90_set_temp8(struct lm90_data *data, int index, long val) > struct i2c_client *client = data->client; > int err; > > + /* prevent integer overflow */ > + val = max(val, -128000l); > + > /* +16 degrees offset for temp2 for the LM99 */ > if (data->kind == lm99 && index == 3) > val -= 16000; > -- > 2.30.2 >