Browse Source

iio: accel: mma9553: check input value for activity period

When setting the activity period, the value introduced by
the user in sysfs is not checked for validity.

Add a boundary check so that only allowed values are
reported as successfully written to device.

Signed-off-by: Irina Tirdea <irina.tirdea@intel.com>
Reported-by: Hartmut Knaack <knaack.h@gmx.de>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
Irina Tirdea 10 years ago
parent
commit
1d93353da5
1 changed files with 4 additions and 0 deletions
  1. 4 0
      drivers/iio/accel/mma9553.c

+ 4 - 0
drivers/iio/accel/mma9553.c

@@ -54,6 +54,7 @@
 #define MMA9553_MASK_CONF_STEPCOALESCE		GENMASK(7, 0)
 #define MMA9553_MASK_CONF_STEPCOALESCE		GENMASK(7, 0)
 
 
 #define MMA9553_REG_CONF_ACTTHD			0x0E
 #define MMA9553_REG_CONF_ACTTHD			0x0E
+#define MMA9553_MAX_ACTTHD			GENMASK(15, 0)
 
 
 /* Pedometer status registers (R-only) */
 /* Pedometer status registers (R-only) */
 #define MMA9553_REG_STATUS			0x00
 #define MMA9553_REG_STATUS			0x00
@@ -869,6 +870,9 @@ static int mma9553_write_event_value(struct iio_dev *indio_dev,
 	case IIO_EV_INFO_PERIOD:
 	case IIO_EV_INFO_PERIOD:
 		switch (chan->type) {
 		switch (chan->type) {
 		case IIO_ACTIVITY:
 		case IIO_ACTIVITY:
+			if (val < 0 || val > MMA9553_ACTIVITY_THD_TO_SEC(
+			    MMA9553_MAX_ACTTHD))
+				return -EINVAL;
 			mutex_lock(&data->mutex);
 			mutex_lock(&data->mutex);
 			ret = mma9553_set_config(data, MMA9553_REG_CONF_ACTTHD,
 			ret = mma9553_set_config(data, MMA9553_REG_CONF_ACTTHD,
 						 &data->conf.actthd,
 						 &data->conf.actthd,