diff options
author | Matt Ranostay <mranostay@gmail.com> | 2016-08-25 02:44:49 -0400 |
---|---|---|
committer | Jonathan Cameron <jic23@kernel.org> | 2016-08-29 13:00:46 -0400 |
commit | 9d1894cd197e297c9ced5393fde6416324b7706d (patch) | |
tree | 3646f47910242b33b12dafe57f568c8730079efd /drivers/iio | |
parent | 0a735aa07f2eb5bcb04fb022b463c70cd1cf1399 (diff) |
iio: chemical: vz89x: prevent corrupted buffer from being read
Signed-off-by: Matt Ranostay <mranostay@gmail.com>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
Diffstat (limited to 'drivers/iio')
-rw-r--r-- | drivers/iio/chemical/vz89x.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/iio/chemical/vz89x.c b/drivers/iio/chemical/vz89x.c index 289d2919deea..cd3870ead3fd 100644 --- a/drivers/iio/chemical/vz89x.c +++ b/drivers/iio/chemical/vz89x.c | |||
@@ -55,6 +55,7 @@ struct vz89x_data { | |||
55 | struct mutex lock; | 55 | struct mutex lock; |
56 | int (*xfer)(struct vz89x_data *data, u8 cmd); | 56 | int (*xfer)(struct vz89x_data *data, u8 cmd); |
57 | 57 | ||
58 | bool is_valid; | ||
58 | unsigned long last_update; | 59 | unsigned long last_update; |
59 | u8 buffer[VZ89TE_REG_MEASUREMENT_RD_SIZE]; | 60 | u8 buffer[VZ89TE_REG_MEASUREMENT_RD_SIZE]; |
60 | }; | 61 | }; |
@@ -229,7 +230,10 @@ static int vz89x_get_measurement(struct vz89x_data *data) | |||
229 | 230 | ||
230 | /* sensor can only be polled once a second max per datasheet */ | 231 | /* sensor can only be polled once a second max per datasheet */ |
231 | if (!time_after(jiffies, data->last_update + HZ)) | 232 | if (!time_after(jiffies, data->last_update + HZ)) |
232 | return 0; | 233 | return data->is_valid ? 0 : -EAGAIN; |
234 | |||
235 | data->is_valid = false; | ||
236 | data->last_update = jiffies; | ||
233 | 237 | ||
234 | ret = data->xfer(data, chip->cmd); | 238 | ret = data->xfer(data, chip->cmd); |
235 | if (ret < 0) | 239 | if (ret < 0) |
@@ -239,7 +243,7 @@ static int vz89x_get_measurement(struct vz89x_data *data) | |||
239 | if (ret) | 243 | if (ret) |
240 | return -EAGAIN; | 244 | return -EAGAIN; |
241 | 245 | ||
242 | data->last_update = jiffies; | 246 | data->is_valid = true; |
243 | 247 | ||
244 | return 0; | 248 | return 0; |
245 | } | 249 | } |