Re: [PATCH 08/13] staging: iio: tsl2x7x: add range checking to three sysfs attributes

2018-04-21 Thread Jonathan Cameron
On Fri, 20 Apr 2018 20:41:48 -0400
Brian Masney  wrote:

> The sysfs attributes in_illuminance0_target_input,
> in_illuminance0_calibrate, and in_proximity0_calibrate did not have
> proper range checking in place so this patch adds the correct range
> checks.
> 
> Signed-off-by: Brian Masney 

Comment inline.


> ---
>  drivers/staging/iio/light/tsl2x7x.c | 25 +++--
>  1 file changed, 11 insertions(+), 14 deletions(-)
> 
> diff --git a/drivers/staging/iio/light/tsl2x7x.c 
> b/drivers/staging/iio/light/tsl2x7x.c
> index 56730baea927..15bc0af1bb6c 100644
> --- a/drivers/staging/iio/light/tsl2x7x.c
> +++ b/drivers/staging/iio/light/tsl2x7x.c
> @@ -835,9 +835,10 @@ static ssize_t in_illuminance0_target_input_store(struct 
> device *dev,
>   if (kstrtoul(buf, 0, &value))
>   return -EINVAL;
>  
> - if (value)
> - chip->settings.als_cal_target = value;
> + if (value < 0 || value > 65535)
> + return -ERANGE;
How about using kstrtou16 which does this check internally...

>  
> + chip->settings.als_cal_target = value;
>   ret = tsl2x7x_invoke_change(indio_dev);
>   if (ret < 0)
>   return ret;
> @@ -853,14 +854,12 @@ static ssize_t in_illuminance0_calibrate_store(struct 
> device *dev,
>   bool value;
>   int ret;
>  
> - if (strtobool(buf, &value))
> + if (kstrtobool(buf, &value) || !value)
>   return -EINVAL;
>  
> - if (value) {
> - ret = tsl2x7x_als_calibrate(indio_dev);
> - if (ret < 0)
> - return ret;
> - }
> + ret = tsl2x7x_als_calibrate(indio_dev);
> + if (ret < 0)
> + return ret;
>  
>   ret = tsl2x7x_invoke_change(indio_dev);
>   if (ret < 0)
> @@ -946,14 +945,12 @@ static ssize_t in_proximity0_calibrate_store(struct 
> device *dev,
>   bool value;
>   int ret;
>  
> - if (strtobool(buf, &value))
> + if (kstrtobool(buf, &value) || !value)
>   return -EINVAL;
>  
> - if (value) {
> - ret = tsl2x7x_prox_cal(indio_dev);
> - if (ret < 0)
> - return ret;
> - }
> + ret = tsl2x7x_prox_cal(indio_dev);
> + if (ret < 0)
> + return ret;
>  
>   ret = tsl2x7x_invoke_change(indio_dev);
>   if (ret < 0)

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 08/13] staging: iio: tsl2x7x: add range checking to three sysfs attributes

2018-04-20 Thread Brian Masney
The sysfs attributes in_illuminance0_target_input,
in_illuminance0_calibrate, and in_proximity0_calibrate did not have
proper range checking in place so this patch adds the correct range
checks.

Signed-off-by: Brian Masney 
---
 drivers/staging/iio/light/tsl2x7x.c | 25 +++--
 1 file changed, 11 insertions(+), 14 deletions(-)

diff --git a/drivers/staging/iio/light/tsl2x7x.c 
b/drivers/staging/iio/light/tsl2x7x.c
index 56730baea927..15bc0af1bb6c 100644
--- a/drivers/staging/iio/light/tsl2x7x.c
+++ b/drivers/staging/iio/light/tsl2x7x.c
@@ -835,9 +835,10 @@ static ssize_t in_illuminance0_target_input_store(struct 
device *dev,
if (kstrtoul(buf, 0, &value))
return -EINVAL;
 
-   if (value)
-   chip->settings.als_cal_target = value;
+   if (value < 0 || value > 65535)
+   return -ERANGE;
 
+   chip->settings.als_cal_target = value;
ret = tsl2x7x_invoke_change(indio_dev);
if (ret < 0)
return ret;
@@ -853,14 +854,12 @@ static ssize_t in_illuminance0_calibrate_store(struct 
device *dev,
bool value;
int ret;
 
-   if (strtobool(buf, &value))
+   if (kstrtobool(buf, &value) || !value)
return -EINVAL;
 
-   if (value) {
-   ret = tsl2x7x_als_calibrate(indio_dev);
-   if (ret < 0)
-   return ret;
-   }
+   ret = tsl2x7x_als_calibrate(indio_dev);
+   if (ret < 0)
+   return ret;
 
ret = tsl2x7x_invoke_change(indio_dev);
if (ret < 0)
@@ -946,14 +945,12 @@ static ssize_t in_proximity0_calibrate_store(struct 
device *dev,
bool value;
int ret;
 
-   if (strtobool(buf, &value))
+   if (kstrtobool(buf, &value) || !value)
return -EINVAL;
 
-   if (value) {
-   ret = tsl2x7x_prox_cal(indio_dev);
-   if (ret < 0)
-   return ret;
-   }
+   ret = tsl2x7x_prox_cal(indio_dev);
+   if (ret < 0)
+   return ret;
 
ret = tsl2x7x_invoke_change(indio_dev);
if (ret < 0)
-- 
2.14.3

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel