aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/hwmon
diff options
context:
space:
mode:
authorJean Delvare <khali@linux-fr.org>2012-12-19 16:17:00 -0500
committerJean Delvare <khali@endymion.delvare>2012-12-19 16:17:00 -0500
commit45633fb370fdd16608756d587245459bf8983a26 (patch)
treec5f840fea63b034ef56f1bd15179ddae20790f25 /drivers/hwmon
parent8f3c7c547d47bcfcf9ca2ed30b79733ce1e7ad3a (diff)
hwmon: (w83627ehf) Get rid of smatch warnings
The smatch static code analyzer complains: drivers/hwmon/w83627ehf.c:911 w83627ehf_update_device() error: buffer overflow 'W83627EHF_REG_TEMP_OFFSET' 3 <= 8 drivers/hwmon/w83627ehf.c:909 w83627ehf_update_device() error: buffer overflow 'data->temp_offset' 3 <= 8 drivers/hwmon/w83627ehf.c:2672 w83627ehf_resume() error: buffer overflow 'W83627EHF_REG_TEMP_OFFSET' 3 <= 8 drivers/hwmon/w83627ehf.c:2673 w83627ehf_resume() error: buffer overflow 'data->temp_offset' 3 <= 8 A deeper analysis of the code shows that these are false positives, as only the lower 3 bits of data->have_temp_offset can be set so the write is never attempted with i >= 3. However this shows that the code isn't very robust and future changes could easily introduce a buffer overflow. So let's add a safety check to prevent that and make smatch happy. Signed-off-by: Jean Delvare <khali@linux-fr.org> Cc: Peter Huewe <PeterHuewe@gmx.de> Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Diffstat (limited to 'drivers/hwmon')
-rw-r--r--drivers/hwmon/w83627ehf.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/hwmon/w83627ehf.c b/drivers/hwmon/w83627ehf.c
index 7fbd0ba0f26f..0e8ffd6059a0 100644
--- a/drivers/hwmon/w83627ehf.c
+++ b/drivers/hwmon/w83627ehf.c
@@ -905,6 +905,8 @@ static struct w83627ehf_data *w83627ehf_update_device(struct device *dev)
905 data->temp_max_hyst[i] 905 data->temp_max_hyst[i]
906 = w83627ehf_read_temp(data, 906 = w83627ehf_read_temp(data,
907 data->reg_temp_hyst[i]); 907 data->reg_temp_hyst[i]);
908 if (i > 2)
909 continue;
908 if (data->have_temp_offset & (1 << i)) 910 if (data->have_temp_offset & (1 << i))
909 data->temp_offset[i] 911 data->temp_offset[i]
910 = w83627ehf_read_value(data, 912 = w83627ehf_read_value(data,
@@ -2670,6 +2672,8 @@ static int w83627ehf_resume(struct device *dev)
2670 if (data->reg_temp_hyst[i]) 2672 if (data->reg_temp_hyst[i])
2671 w83627ehf_write_temp(data, data->reg_temp_hyst[i], 2673 w83627ehf_write_temp(data, data->reg_temp_hyst[i],
2672 data->temp_max_hyst[i]); 2674 data->temp_max_hyst[i]);
2675 if (i > 2)
2676 continue;
2673 if (data->have_temp_offset & (1 << i)) 2677 if (data->have_temp_offset & (1 << i))
2674 w83627ehf_write_value(data, 2678 w83627ehf_write_value(data,
2675 W83627EHF_REG_TEMP_OFFSET[i], 2679 W83627EHF_REG_TEMP_OFFSET[i],