iio: pressure: Use iio_push_to_buffers_with_ts() to provide length for runtime checks.

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>
pull/1259/head
Jonathan Cameron 2025-04-13 11:34:42 +01:00
parent 886a446b76
commit 77e8a16a7d
6 changed files with 26 additions and 19 deletions

View 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);

View 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;

View 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);

View 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);

View 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;

View 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;
}