From: Alexandr Sapozhnikov <alsp705@gmail.com>
To: "Pali Rohár" <pali@kernel.org>,
"Jean Delvare" <jdelvare@suse.com>,
"Guenter Roeck" <linux@roeck-us.net>
Cc: Alexandr Sapozhnikov <alsp705@gmail.com>,
linux-hwmon@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH] hwmon: (dell-smm) overflow check during multiplication
Date: Mon, 10 Nov 2025 18:22:41 +0300 [thread overview]
Message-ID: <20251110152242.26-1-alsp705@gmail.com> (raw)
Added overflow checking when multiplying int by int and writing the result
to long to prevent data corruption due to overflow.
Fixes: b1986c8e31a3 ("hwmon: (dell-smm) Add support for fanX_min, fanX_max and fanX_target")
Signed-off-by: Alexandr Sapozhnikov <alsp705@gmail.com>
---
drivers/hwmon/dell-smm-hwmon.c | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/drivers/hwmon/dell-smm-hwmon.c b/drivers/hwmon/dell-smm-hwmon.c
index 1572b5416015..ee2fe651c07f 100644
--- a/drivers/hwmon/dell-smm-hwmon.c
+++ b/drivers/hwmon/dell-smm-hwmon.c
@@ -34,6 +34,7 @@
#include <linux/thermal.h>
#include <linux/types.h>
#include <linux/uaccess.h>
+#include <linux/limits.h>
#include <linux/i8k.h>
@@ -736,6 +737,11 @@ static umode_t dell_smm_is_visible(const void *drvdata, enum hwmon_sensor_types
return 0;
}
+static int dell_smm_check_overflow(int a, int b)
+{
+ return (long long)a * (long long)b > LONG_MAX;
+}
+
static int dell_smm_read(struct device *dev, enum hwmon_sensor_types type, u32 attr, int channel,
long *val)
{
@@ -769,12 +775,17 @@ static int dell_smm_read(struct device *dev, enum hwmon_sensor_types type, u32 a
return 0;
case hwmon_fan_min:
+ if (dell_smm_check_overflow(data->fan_nominal_speed[channel][0], mult)
+ return -EINVAL;
*val = data->fan_nominal_speed[channel][0] * mult;
return 0;
case hwmon_fan_max:
+ if (dell_smm_check_overflow(
+ data->fan_nominal_speed[channel][data->i8k_fan_max], mult)
+ return -EINVAL;
*val = data->fan_nominal_speed[channel][data->i8k_fan_max] * mult;
-
+
return 0;
case hwmon_fan_target:
ret = i8k_get_fan_status(data, channel);
@@ -784,6 +795,8 @@ static int dell_smm_read(struct device *dev, enum hwmon_sensor_types type, u32 a
if (ret > data->i8k_fan_max)
ret = data->i8k_fan_max;
+ if (dell_smm_check_overflow(data->fan_nominal_speed[channel][ret], mult)
+ return -EINVAL;
*val = data->fan_nominal_speed[channel][ret] * mult;
return 0;
--
2.51.0
next reply other threads:[~2025-11-10 15:22 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-10 15:22 Alexandr Sapozhnikov [this message]
2025-11-13 20:34 ` [PATCH] hwmon: (dell-smm) overflow check during multiplication Guenter Roeck
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20251110152242.26-1-alsp705@gmail.com \
--to=alsp705@gmail.com \
--cc=jdelvare@suse.com \
--cc=linux-hwmon@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@roeck-us.net \
--cc=pali@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.