| From cf6c1735a063dcd6514010f88a3b29d40ab04b23 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sat, 1 May 2021 18:01:10 +0100 |
| Subject: iio: adc: ti-ads1015: Fix buffer alignment in |
| iio_push_to_buffers_with_timestamp() |
| |
| From: Jonathan Cameron <Jonathan.Cameron@huawei.com> |
| |
| [ Upstream commit d85d71dd1ab67eaa7351f69fec512d8f09d164e1 ] |
| |
| To make code more readable, use a structure to express the channel |
| layout and ensure the timestamp is 8 byte aligned. |
| |
| Found during an audit of all calls of this function. |
| |
| Fixes: ecc24e72f437 ("iio: adc: Add TI ADS1015 ADC driver support") |
| Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> |
| Cc: Daniel Baluta <daniel.baluta@nxp.com> |
| Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com> |
| Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com> |
| Link: https://lore.kernel.org/r/20210501170121.512209-9-jic23@kernel.org |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/iio/adc/ti-ads1015.c | 12 ++++++++---- |
| 1 file changed, 8 insertions(+), 4 deletions(-) |
| |
| diff --git a/drivers/iio/adc/ti-ads1015.c b/drivers/iio/adc/ti-ads1015.c |
| index 9fef39bcf997..5b828428be77 100644 |
| --- a/drivers/iio/adc/ti-ads1015.c |
| +++ b/drivers/iio/adc/ti-ads1015.c |
| @@ -395,10 +395,14 @@ static irqreturn_t ads1015_trigger_handler(int irq, void *p) |
| struct iio_poll_func *pf = p; |
| struct iio_dev *indio_dev = pf->indio_dev; |
| struct ads1015_data *data = iio_priv(indio_dev); |
| - s16 buf[8]; /* 1x s16 ADC val + 3x s16 padding + 4x s16 timestamp */ |
| + /* Ensure natural alignment of timestamp */ |
| + struct { |
| + s16 chan; |
| + s64 timestamp __aligned(8); |
| + } scan; |
| int chan, ret, res; |
| |
| - memset(buf, 0, sizeof(buf)); |
| + memset(&scan, 0, sizeof(scan)); |
| |
| mutex_lock(&data->lock); |
| chan = find_first_bit(indio_dev->active_scan_mask, |
| @@ -409,10 +413,10 @@ static irqreturn_t ads1015_trigger_handler(int irq, void *p) |
| goto err; |
| } |
| |
| - buf[0] = res; |
| + scan.chan = res; |
| mutex_unlock(&data->lock); |
| |
| - iio_push_to_buffers_with_timestamp(indio_dev, buf, |
| + iio_push_to_buffers_with_timestamp(indio_dev, &scan, |
| iio_get_time_ns(indio_dev)); |
| |
| err: |
| -- |
| 2.30.2 |
| |