[PATCH v2 1/2] hwmon: (lm90) Prevent integer overflow of temperature calculations

From: Dmitry Osipenko
Date: Sun Jun 20 2021 - 17:14:53 EST


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.

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 = &reg[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