| From 4767f9f5bbe988ca03628b58e7b1779ca159ae00 Mon Sep 17 00:00:00 2001 |
| From: Vivien Didelot <vivien.didelot@savoirfairelinux.com> |
| Date: Mon, 21 Mar 2011 17:59:35 +0100 |
| Subject: [PATCH] hwmon: (sht15) Fix integer overflow in humidity calculation |
| |
| commit ccd32e735de7a941906e093f8dca924bb05c5794 upstream. |
| |
| An integer overflow occurs in the calculation of RHlinear when the |
| relative humidity is greater than around 30%. The consequence is a subtle |
| (but noticeable) error in the resulting humidity measurement. |
| |
| Signed-off-by: Vivien Didelot <vivien.didelot@savoirfairelinux.com> |
| Signed-off-by: Jean Delvare <khali@linux-fr.org> |
| Cc: Jonathan Cameron <jic23@cam.ac.uk> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/hwmon/sht15.c b/drivers/hwmon/sht15.c |
| index a610e78..38a41d2 100644 |
| --- a/drivers/hwmon/sht15.c |
| +++ b/drivers/hwmon/sht15.c |
| @@ -333,11 +333,11 @@ static inline int sht15_calc_humid(struct sht15_data *data) |
| |
| const int c1 = -4; |
| const int c2 = 40500; /* x 10 ^ -6 */ |
| - const int c3 = -2800; /* x10 ^ -9 */ |
| + const int c3 = -28; /* x 10 ^ -7 */ |
| |
| RHlinear = c1*1000 |
| + c2 * data->val_humid/1000 |
| - + (data->val_humid * data->val_humid * c3)/1000000; |
| + + (data->val_humid * data->val_humid * c3) / 10000; |
| return (temp - 25000) * (10000 + 80 * data->val_humid) |
| / 1000000 + RHlinear; |
| } |
| -- |
| 1.7.4.4 |
| |