iio: pressure: Use iio_push_to_buffers_with_ts() to provide length for runtime checks.
authorJonathan Cameron <Jonathan.Cameron@huawei.com>
Sun, 13 Apr 2025 10:34:42 +0000 (11:34 +0100)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Wed, 21 May 2025 13:20:27 +0000 (14:20 +0100)
This new function allows us to perform debug checks in the helper to ensure
that the overrun does not occur.  Use it in all the simple cases where
either a static buffer or a structure is used in the drivers.

Reviewed-by: Matti Vaittinen <mazziesaccount@gmail.com> # ROHM BM1390
Reviewed-by: David Lechner <dlechner@baylibre.com>
Link: https://patch.msgid.link/20250413103443.2420727-20-jic23@kernel.org
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/pressure/bmp280-core.c
drivers/iio/pressure/hid-sensor-press.c
drivers/iio/pressure/hsc030pa.c
drivers/iio/pressure/mpl3115.c
drivers/iio/pressure/rohm-bm1390.c
drivers/iio/pressure/zpa2326.c

index d44ab65..c20cc4a 100644 (file)
@@ -1142,8 +1142,9 @@ static irqreturn_t bmp280_trigger_handler(int irq, void *p)
        chans[0] = comp_press;
        chans[1] = comp_temp;
 
-       iio_push_to_buffers_with_timestamp(indio_dev, data->sensor_data,
-                                          iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, data->sensor_data,
+                                   sizeof(data->sensor_data),
+                                   iio_get_time_ns(indio_dev));
 
 out:
        iio_trigger_notify_done(indio_dev->trig);
@@ -1273,8 +1274,9 @@ static irqreturn_t bme280_trigger_handler(int irq, void *p)
        chans[1] = comp_temp;
        chans[2] = comp_humidity;
 
-       iio_push_to_buffers_with_timestamp(indio_dev, data->sensor_data,
-                                          iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, data->sensor_data,
+                                   sizeof(data->sensor_data),
+                                   iio_get_time_ns(indio_dev));
 
 out:
        iio_trigger_notify_done(indio_dev->trig);
@@ -1936,8 +1938,9 @@ static irqreturn_t bmp380_trigger_handler(int irq, void *p)
        chans[0] = comp_press;
        chans[1] = comp_temp;
 
-       iio_push_to_buffers_with_timestamp(indio_dev, data->sensor_data,
-                                          iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, data->sensor_data,
+                                   sizeof(data->sensor_data),
+                                   iio_get_time_ns(indio_dev));
 
 out:
        iio_trigger_notify_done(indio_dev->trig);
@@ -2630,8 +2633,9 @@ static irqreturn_t bmp580_trigger_handler(int irq, void *p)
        /* Temperature calculations */
        memcpy(&data->sensor_data[offset], &data->buf[0], 3);
 
-       iio_push_to_buffers_with_timestamp(indio_dev, data->sensor_data,
-                                          iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, data->sensor_data,
+                                   sizeof(data->sensor_data),
+                                   iio_get_time_ns(indio_dev));
 
 out:
        iio_trigger_notify_done(indio_dev->trig);
@@ -2969,8 +2973,9 @@ static irqreturn_t bmp180_trigger_handler(int irq, void *p)
        chans[0] = comp_press;
        chans[1] = comp_temp;
 
-       iio_push_to_buffers_with_timestamp(indio_dev, data->sensor_data,
-                                          iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, data->sensor_data,
+                                   sizeof(data->sensor_data),
+                                   iio_get_time_ns(indio_dev));
 
 out:
        iio_trigger_notify_done(indio_dev->trig);
index bffeddf..5f1d6ab 100644 (file)
@@ -176,8 +176,9 @@ static int press_proc_event(struct hid_sensor_hub_device *hsdev,
                if (!press_state->timestamp)
                        press_state->timestamp = iio_get_time_ns(indio_dev);
 
-               iio_push_to_buffers_with_timestamp(
-                       indio_dev, &press_state->scan, press_state->timestamp);
+               iio_push_to_buffers_with_ts(indio_dev, &press_state->scan,
+                                           sizeof(press_state->scan),
+                                           press_state->timestamp);
        }
 
        return 0;
index 1682458..2d00c06 100644 (file)
@@ -314,8 +314,8 @@ static irqreturn_t hsc_trigger_handler(int irq, void *private)
        memcpy(&data->scan.chan[0], &data->buffer[0], 2);
        memcpy(&data->scan.chan[1], &data->buffer[2], 2);
 
-       iio_push_to_buffers_with_timestamp(indio_dev, &data->scan,
-                                          iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, &data->scan, sizeof(data->scan),
+                                   iio_get_time_ns(indio_dev));
 
 error:
        iio_trigger_notify_done(indio_dev->trig);
index 8397155..d671599 100644 (file)
@@ -191,8 +191,8 @@ static irqreturn_t mpl3115_trigger_handler(int irq, void *p)
        }
        mutex_unlock(&data->lock);
 
-       iio_push_to_buffers_with_timestamp(indio_dev, buffer,
-               iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, buffer, sizeof(buffer),
+                                   iio_get_time_ns(indio_dev));
 
 done:
        iio_trigger_notify_done(indio_dev->trig);
index c651ead..dac27fd 100644 (file)
@@ -652,7 +652,8 @@ static irqreturn_t bm1390_trigger_handler(int irq, void *p)
                }
        }
 
-       iio_push_to_buffers_with_timestamp(idev, &data->buf, data->timestamp);
+       iio_push_to_buffers_with_ts(idev, &data->buf, sizeof(data->buf),
+                                   data->timestamp);
        iio_trigger_notify_done(idev->trig);
 
        return IRQ_HANDLED;
index 30f0077..1640aa3 100644 (file)
@@ -618,8 +618,8 @@ static int zpa2326_fill_sample_buffer(struct iio_dev               *indio_dev,
         */
        zpa2326_dbg(indio_dev, "filling raw samples buffer");
 
-       iio_push_to_buffers_with_timestamp(indio_dev, &sample,
-                                          private->timestamp);
+       iio_push_to_buffers_with_ts(indio_dev, &sample, sizeof(sample),
+                                   private->timestamp);
 
        return 0;
 }