]> git.ipfire.org Git - thirdparty/kernel/linux.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)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Tue, 4 Mar 2025 13:17:48 +0000 (13:17 +0000)
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>
drivers/iio/accel/mma8452.c

index 962d289065ab7bb3da5ae102cb5ee2cb96662af5..1b2014c4c4b469233038a16447063cf33dfe690c 100644 (file)
@@ -712,7 +712,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)
@@ -772,14 +772,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;