Re: [PATCH v2 1/2] hwmon: (lm90) Prevent integer overflow of temperature calculations
From: Guenter Roeck <linux@roeck-us.net>
Date: 2021-06-21 12:12:37
Also in:
linux-hwmon, linux-tegra, lkml
From: Guenter Roeck <linux@roeck-us.net>
Date: 2021-06-21 12:12:37
Also in:
linux-hwmon, linux-tegra, lkml
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@gmail.com> --- 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