diff options
author | Nikita Zhandarovich <n.zhandarovich@fintech.ru> | 2023-05-10 16:35:37 +0200 |
---|---|---|
committer | Guenter Roeck <linux@roeck-us.net> | 2023-05-19 14:59:37 +0200 |
commit | 0babf89c9cca7e074d6e59893e462e4886f481cc (patch) | |
tree | ddeb47377a07238929c6bc7144ffe4a780312ad1 /drivers/hwmon/f71882fg.c | |
parent | Linux 6.4-rc2 (diff) | |
download | linux-0babf89c9cca7e074d6e59893e462e4886f481cc.tar.xz linux-0babf89c9cca7e074d6e59893e462e4886f481cc.zip |
hwmon: (f71882fg) prevent possible division by zero
In the unlikely event that something goes wrong with the device and
its registers, the fan_from_reg() function may return 0. This value
will cause a division-by-zero error in the show_pwm() function.
To prevent this, test the value of
fan_from_reg(data->fan_full_speed[nr]) against 0 before performing
the division. If the division-by-zero error is avoided, assign 0 to
the val variable.
Found by Linux Verification Center (linuxtesting.org) with static
analysis tool SVACE.
Fixes: df9ec2dae094 ("hwmon: (f71882fg) Reorder symbols to get rid of a few forward declarations")
Signed-off-by: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
Link: https://lore.kernel.org/r/20230510143537.145060-1-n.zhandarovich@fintech.ru
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Diffstat (limited to 'drivers/hwmon/f71882fg.c')
-rw-r--r-- | drivers/hwmon/f71882fg.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/hwmon/f71882fg.c b/drivers/hwmon/f71882fg.c index 70121482a617..27207ec6f7fe 100644 --- a/drivers/hwmon/f71882fg.c +++ b/drivers/hwmon/f71882fg.c @@ -1096,8 +1096,11 @@ static ssize_t show_pwm(struct device *dev, val = data->pwm[nr]; else { /* RPM mode */ - val = 255 * fan_from_reg(data->fan_target[nr]) - / fan_from_reg(data->fan_full_speed[nr]); + if (fan_from_reg(data->fan_full_speed[nr])) + val = 255 * fan_from_reg(data->fan_target[nr]) + / fan_from_reg(data->fan_full_speed[nr]); + else + val = 0; } mutex_unlock(&data->update_lock); return sprintf(buf, "%d\n", val); |