]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
iio: accel: mma8452: Ensure error return on failure to matching oversampling ratio
authorJonathan Cameron <Jonathan.Cameron@huawei.com>
Mon, 17 Feb 2025 14:01:28 +0000 (14:01 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 10 Apr 2025 12:37:33 +0000 (14:37 +0200)
[ Upstream commit df330c808182a8beab5d0f84a6cbc9cff76c61fc ]

If a match was not found, then the write_raw() callback would return
the odr index, not an error. Return -EINVAL if this occurs.
To avoid similar issues in future, introduce j, a new indexing variable
rather than using ret for this purpose.

Fixes: 79de2ee469aa ("iio: accel: mma8452: claim direct mode during write raw")
Reviewed-by: David Lechner <dlechner@baylibre.com>
Link: https://patch.msgid.link/20250217140135.896574-2-jic23@kernel.org
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/iio/accel/mma8452.c

index f42a8871148653f45d30aecf0778e89e948fde91..16a0de6002be052b42a10880663250ebcec1f25d 100644 (file)
@@ -711,7 +711,7 @@ static int mma8452_write_raw(struct iio_dev *indio_dev,
                             int val, int val2, long mask)
 {
        struct mma8452_data *data = iio_priv(indio_dev);
-       int i, ret;
+       int i, j, ret;
 
        ret = iio_device_claim_direct_mode(indio_dev);
        if (ret)
@@ -771,14 +771,18 @@ static int mma8452_write_raw(struct iio_dev *indio_dev,
                break;
 
        case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
-               ret = mma8452_get_odr_index(data);
+               j = mma8452_get_odr_index(data);
 
                for (i = 0; i < ARRAY_SIZE(mma8452_os_ratio); i++) {
-                       if (mma8452_os_ratio[i][ret] == val) {
+                       if (mma8452_os_ratio[i][j] == val) {
                                ret = mma8452_set_power_mode(data, i);
                                break;
                        }
                }
+               if (i == ARRAY_SIZE(mma8452_os_ratio)) {
+                       ret = -EINVAL;
+                       break;
+               }
                break;
        default:
                ret = -EINVAL;