Browse Source

staging: iio: isl29018: fixed race condition in in_illuminance_scale_available_show()

in_illuminance_scale_available_show() references the
isl29018_chip->int_time variable in three places inside a for loop.
The value of the int_time variable can be updated by the
isl29018_set_integration_time() function, which is called by the
isl29018_write_raw() function. isl29018_write_raw() locks a
mutex specific to this driver when the integration time variable is
updated.

Signed-off-by: Brian Masney <masneyb@onstation.org>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
Brian Masney 9 years ago
parent
commit
5faf98cb31
1 changed files with 2 additions and 0 deletions
  1. 2 0
      drivers/staging/iio/light/isl29018.c

+ 2 - 0
drivers/staging/iio/light/isl29018.c

@@ -277,10 +277,12 @@ static ssize_t in_illuminance_scale_available_show
 	unsigned int i;
 	int len = 0;
 
+	mutex_lock(&chip->lock);
 	for (i = 0; i < ARRAY_SIZE(isl29018_scales[chip->int_time]); ++i)
 		len += sprintf(buf + len, "%d.%06d ",
 			       isl29018_scales[chip->int_time][i].scale,
 			       isl29018_scales[chip->int_time][i].uscale);
+	mutex_unlock(&chip->lock);
 
 	buf[len - 1] = '\n';