On Wed, May 10, 2023 at 07:35:37AM -0700, Nikita Zhandarovich wrote: > 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@xxxxxxxxxx> Applied. Thanks, Guenter > --- > drivers/hwmon/f71882fg.c | 7 +++++-- > 1 file 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);