[PATCH] hwmon/dme1737: fix divide-by-0

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi jean,


On Jan 26, 2008 8:26 AM, Jean Delvare <khali at linux-fr.org> wrote:
> Hi Juerg,
>
> On Thu, 24 Jan 2008 09:11:25 -0800, Juerg Haefliger wrote:
> > This patch fixes a possible divide-by-0.
> >
> > Signed-off-by: Juerg Haefliger <juergh at gmail.com>
> >
> > Index: linux-2.6.24-rc8/drivers/hwmon/dme1737.c
> > ===================================================================
> > --- linux-2.6.24-rc8.orig/drivers/hwmon/dme1737.c     2008-01-24 09:04:24.000000000 -0800
> > +++ linux-2.6.24-rc8/drivers/hwmon/dme1737.c  2008-01-24 09:05:05.000000000 -0800
> > @@ -285,8 +285,8 @@
> >
> >  static inline int FAN_TO_REG(int val, int tpc)
> >  {
> > -     return SENSORS_LIMIT((tpc == 0) ? 90000 * 60 / val : val / tpc,
> > -                          0, 0xffff);
> > +     return (val <= 0) ? 0xffff : SENSORS_LIMIT((tpc == 0) ?
> > +             90000 * 60 / val : val / tpc, 0, 0xfffe);
> >  }
> >
> >  /* Fan TPC (tach pulse count)
>
> While I agree that it fixes the division by 0, and the fix looks OK in
> legacy mode, I am not sure that it is correct in TPC mode. While
> register value 0xffff corresponds to a stalled fan in legacy mode,
> that's not the case in TPC mode according to the datasheet. In TPC
> mode, a stalled fan leads to a register value of 0x0000. So I believe
> that the driver should write 0x0000, not 0xffff, to the register if the
> user sets the limit to 0 RPM in TPC mode. This would lead to the
> following code (untested):
>
>         if (tpc)
>                 return SENSORS_LIMIT(val / tpc, 0, 0xffff);
>         else
>                 return (val <= 0) ? 0xffff :
>                        SENSORS_LIMIT(90000 * 60 / val, 0, 0xfffe);
>
> What do you think?

Good catch, and this also applies for the conversion in the other direction.
Updated patch will follow...

...juerg


> (I wish manufacturers could come up with more simple chips...)
>
> --
> Jean Delvare
>




[Index of Archives]     [Linux Kernel]     [Linux Hardware Monitoring]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux