mbox series

[00/19] IIO: Alignment fixes part 2 - struct used to ensure alignment

Message ID 20210501170121.512209-1-jic23@kernel.org (mailing list archive)
Headers show
Series IIO: Alignment fixes part 2 - struct used to ensure alignment | expand

Message

Jonathan Cameron May 1, 2021, 5:01 p.m. UTC
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>

I finally got around to do a manual audit of all the calls to
iio_push_to_buffers_with_timestamp() which has the somewhat odd requirements
of:
1. 8 byte alignment of the provided buffer.
2. space for an 8 byte naturally aligned timestamp to be inserted at the
   end.

Unfortuantely there were rather a lot of these left, but time to bite the bullet
and clean them up.

As discussed previous in
https://lore.kernel.org/linux-iio/20200920112742.170751-1-jic23@kernel.org/
it is not easy to fix the alignment issue without requiring a bounce buffer
(see part 4 of the alignment fixes for a proposal for that where it is
absolutely necessary).

Part 2 is the simple cases where the timestamp position is always the same
(as not more than 8 bytes of other scan elements) and where it is either
in a structure that is kzalloc'd or there was already an explicit memset
that would clear any holes in the structure (and hence avoid a potential
kernel data leak).

Cc: Peter Meerwald <pmeerw@pmeerw.net>
Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Cc: Daniel Baluta <daniel.baluta@nxp.com>
Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: Stefan-Gabriel Mirea <stefan-gabriel.mirea@nxp.com>
Cc: Sanchayan Maity <maitysanchayan@gmail.com>
Cc: Stephan Gerhold <stephan@gerhold.net>
Cc: Andreas Klinger <ak@it-klinger.de>
Cc: Matt Ranostay <matt.ranostay@konsulko.com>
Cc: Linus Walleij <linus.walleij@linaro.org>

Jonathan Cameron (19):
  iio: accel: bma180: Fix buffer alignment in
    iio_push_to_buffers_with_timestamp()
  iio: accel: bma220: Fix buffer alignment in
    iio_push_to_buffers_with_timestamp()
  iio: accel: hid: Fix buffer alignment in
    iio_push_to_buffers_with_timestamp()
  iio: accel: kxcjk-1013: Fix buffer alignment in
    iio_push_to_buffers_with_timestamp()
  iio: accel: mxc4005: Fix overread of data and alignment issue.
  iio: accel: stk8312: Fix buffer alignment in
    iio_push_to_buffers_with_timestamp()
  iio: accel: stk8ba50: Fix buffer alignment in
    iio_push_to_buffers_with_timestamp()
  iio: adc: ti-ads1015: Fix buffer alignment in
    iio_push_to_buffers_with_timestamp()
  iio: adc: vf610: Fix buffer alignment in
    iio_push_to_buffers_with_timestamp()
  iio: gyro: bmg160: Fix buffer alignment in
    iio_push_to_buffers_with_timestamp()
  iio: humidity: am2315: Fix buffer alignment in
    iio_push_to_buffers_with_timestamp()
  iio: prox: srf08: Fix buffer alignment in
    iio_push_to_buffers_with_timestamp()
  iio: prox: pulsed-light: Fix buffer alignment in
    iio_push_to_buffers_with_timestamp()
  iio: prox: as3935: Fix buffer alignment in
    iio_push_to_buffers_with_timestamp()
  iio: magn: hmc5843: Fix buffer alignment in
    iio_push_to_buffers_with_timestamp()
  iio: magn: bmc150: Fix buffer alignment in
    iio_push_to_buffers_with_timestamp()
  iio: light: isl29125: Fix buffer alignment in
    iio_push_to_buffers_with_timestamp()
  iio: light: tcs3414: Fix buffer alignment in
    iio_push_to_buffers_with_timestamp()
  iio: light: tcs3472: Fix buffer alignment in
    iio_push_to_buffers_with_timestamp()

 drivers/iio/accel/bma180.c                    | 10 +++++---
 drivers/iio/accel/bma220_spi.c                | 10 +++++---
 drivers/iio/accel/hid-sensor-accel-3d.c       | 13 ++++++----
 drivers/iio/accel/kxcjk-1013.c                | 24 +++++++++++--------
 drivers/iio/accel/mxc4005.c                   | 10 +++++---
 drivers/iio/accel/stk8312.c                   | 12 ++++++----
 drivers/iio/accel/stk8ba50.c                  | 17 +++++++------
 drivers/iio/adc/ti-ads1015.c                  | 12 ++++++----
 drivers/iio/adc/vf610_adc.c                   | 10 +++++---
 drivers/iio/gyro/bmg160_core.c                | 10 +++++---
 drivers/iio/humidity/am2315.c                 | 16 ++++++++-----
 drivers/iio/light/isl29125.c                  | 10 +++++---
 drivers/iio/light/tcs3414.c                   | 10 +++++---
 drivers/iio/light/tcs3472.c                   | 10 +++++---
 drivers/iio/magnetometer/bmc150_magn.c        | 11 +++++----
 drivers/iio/magnetometer/hmc5843.h            |  8 +++++--
 drivers/iio/magnetometer/hmc5843_core.c       |  4 ++--
 drivers/iio/proximity/as3935.c                | 10 +++++---
 .../iio/proximity/pulsedlight-lidar-lite-v2.c | 10 +++++---
 drivers/iio/proximity/srf08.c                 | 14 +++++------
 20 files changed, 148 insertions(+), 83 deletions(-)

Comments

Andy Shevchenko May 1, 2021, 7:12 p.m. UTC | #1
On Sat, May 1, 2021 at 8:03 PM Jonathan Cameron <jic23@kernel.org> wrote:
>
> From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
>
> I finally got around to do a manual audit of all the calls to
> iio_push_to_buffers_with_timestamp() which has the somewhat odd requirements
> of:
> 1. 8 byte alignment of the provided buffer.
> 2. space for an 8 byte naturally aligned timestamp to be inserted at the
>    end.
>
> Unfortuantely there were rather a lot of these left, but time to bite the bullet

Unfortunately

> and clean them up.
>
> As discussed previous in
> https://lore.kernel.org/linux-iio/20200920112742.170751-1-jic23@kernel.org/
> it is not easy to fix the alignment issue without requiring a bounce buffer
> (see part 4 of the alignment fixes for a proposal for that where it is
> absolutely necessary).
>
> Part 2 is the simple cases where the timestamp position is always the same
> (as not more than 8 bytes of other scan elements) and where it is either
> in a structure that is kzalloc'd or there was already an explicit memset
> that would clear any holes in the structure (and hence avoid a potential
> kernel data leak).
>
> Cc: Peter Meerwald <pmeerw@pmeerw.net>

> Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

1

> Cc: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
> Cc: Daniel Baluta <daniel.baluta@nxp.com>

> Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

2

One time is enough :-)

Anyway, I looked at them all and haven't seen any issues on the first glance, so
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>

> Cc: Stefan-Gabriel Mirea <stefan-gabriel.mirea@nxp.com>
> Cc: Sanchayan Maity <maitysanchayan@gmail.com>
> Cc: Stephan Gerhold <stephan@gerhold.net>
> Cc: Andreas Klinger <ak@it-klinger.de>
> Cc: Matt Ranostay <matt.ranostay@konsulko.com>
> Cc: Linus Walleij <linus.walleij@linaro.org>
>
> Jonathan Cameron (19):
>   iio: accel: bma180: Fix buffer alignment in
>     iio_push_to_buffers_with_timestamp()
>   iio: accel: bma220: Fix buffer alignment in
>     iio_push_to_buffers_with_timestamp()
>   iio: accel: hid: Fix buffer alignment in
>     iio_push_to_buffers_with_timestamp()
>   iio: accel: kxcjk-1013: Fix buffer alignment in
>     iio_push_to_buffers_with_timestamp()
>   iio: accel: mxc4005: Fix overread of data and alignment issue.
>   iio: accel: stk8312: Fix buffer alignment in
>     iio_push_to_buffers_with_timestamp()
>   iio: accel: stk8ba50: Fix buffer alignment in
>     iio_push_to_buffers_with_timestamp()
>   iio: adc: ti-ads1015: Fix buffer alignment in
>     iio_push_to_buffers_with_timestamp()
>   iio: adc: vf610: Fix buffer alignment in
>     iio_push_to_buffers_with_timestamp()
>   iio: gyro: bmg160: Fix buffer alignment in
>     iio_push_to_buffers_with_timestamp()
>   iio: humidity: am2315: Fix buffer alignment in
>     iio_push_to_buffers_with_timestamp()
>   iio: prox: srf08: Fix buffer alignment in
>     iio_push_to_buffers_with_timestamp()
>   iio: prox: pulsed-light: Fix buffer alignment in
>     iio_push_to_buffers_with_timestamp()
>   iio: prox: as3935: Fix buffer alignment in
>     iio_push_to_buffers_with_timestamp()
>   iio: magn: hmc5843: Fix buffer alignment in
>     iio_push_to_buffers_with_timestamp()
>   iio: magn: bmc150: Fix buffer alignment in
>     iio_push_to_buffers_with_timestamp()
>   iio: light: isl29125: Fix buffer alignment in
>     iio_push_to_buffers_with_timestamp()
>   iio: light: tcs3414: Fix buffer alignment in
>     iio_push_to_buffers_with_timestamp()
>   iio: light: tcs3472: Fix buffer alignment in
>     iio_push_to_buffers_with_timestamp()
>
>  drivers/iio/accel/bma180.c                    | 10 +++++---
>  drivers/iio/accel/bma220_spi.c                | 10 +++++---
>  drivers/iio/accel/hid-sensor-accel-3d.c       | 13 ++++++----
>  drivers/iio/accel/kxcjk-1013.c                | 24 +++++++++++--------
>  drivers/iio/accel/mxc4005.c                   | 10 +++++---
>  drivers/iio/accel/stk8312.c                   | 12 ++++++----
>  drivers/iio/accel/stk8ba50.c                  | 17 +++++++------
>  drivers/iio/adc/ti-ads1015.c                  | 12 ++++++----
>  drivers/iio/adc/vf610_adc.c                   | 10 +++++---
>  drivers/iio/gyro/bmg160_core.c                | 10 +++++---
>  drivers/iio/humidity/am2315.c                 | 16 ++++++++-----
>  drivers/iio/light/isl29125.c                  | 10 +++++---
>  drivers/iio/light/tcs3414.c                   | 10 +++++---
>  drivers/iio/light/tcs3472.c                   | 10 +++++---
>  drivers/iio/magnetometer/bmc150_magn.c        | 11 +++++----
>  drivers/iio/magnetometer/hmc5843.h            |  8 +++++--
>  drivers/iio/magnetometer/hmc5843_core.c       |  4 ++--
>  drivers/iio/proximity/as3935.c                | 10 +++++---
>  .../iio/proximity/pulsedlight-lidar-lite-v2.c | 10 +++++---
>  drivers/iio/proximity/srf08.c                 | 14 +++++------
>  20 files changed, 148 insertions(+), 83 deletions(-)
>
> --
> 2.31.1
>
Jonathan Cameron May 13, 2021, 5:54 p.m. UTC | #2
On Sat, 1 May 2021 22:12:40 +0300
Andy Shevchenko <andy.shevchenko@gmail.com> wrote:

> On Sat, May 1, 2021 at 8:03 PM Jonathan Cameron <jic23@kernel.org> wrote:
> >
> > From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> >
> > I finally got around to do a manual audit of all the calls to
> > iio_push_to_buffers_with_timestamp() which has the somewhat odd requirements
> > of:
> > 1. 8 byte alignment of the provided buffer.
> > 2. space for an 8 byte naturally aligned timestamp to be inserted at the
> >    end.
> >
> > Unfortuantely there were rather a lot of these left, but time to bite the bullet  
> 
> Unfortunately
> 
> > and clean them up.
> >
> > As discussed previous in
> > https://lore.kernel.org/linux-iio/20200920112742.170751-1-jic23@kernel.org/
> > it is not easy to fix the alignment issue without requiring a bounce buffer
> > (see part 4 of the alignment fixes for a proposal for that where it is
> > absolutely necessary).
> >
> > Part 2 is the simple cases where the timestamp position is always the same
> > (as not more than 8 bytes of other scan elements) and where it is either
> > in a structure that is kzalloc'd or there was already an explicit memset
> > that would clear any holes in the structure (and hence avoid a potential
> > kernel data leak).
> >
> > Cc: Peter Meerwald <pmeerw@pmeerw.net>  
> 
> > Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>  
> 
> 1
> 
> > Cc: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
> > Cc: Daniel Baluta <daniel.baluta@nxp.com>  
> 
> > Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>  
> 
> 2
> 
> One time is enough :-)
> 
> Anyway, I looked at them all and haven't seen any issues on the first glance, so
> Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>

Thanks.  Whole series applied though seems I was being more than a bit careless
in some of the early ones so I took a very close look at all them whilst applying.

Do too many similar patches, and mistakes slip in :(

Thanks,

Jonathan

> 
> > Cc: Stefan-Gabriel Mirea <stefan-gabriel.mirea@nxp.com>
> > Cc: Sanchayan Maity <maitysanchayan@gmail.com>
> > Cc: Stephan Gerhold <stephan@gerhold.net>
> > Cc: Andreas Klinger <ak@it-klinger.de>
> > Cc: Matt Ranostay <matt.ranostay@konsulko.com>
> > Cc: Linus Walleij <linus.walleij@linaro.org>
> >
> > Jonathan Cameron (19):
> >   iio: accel: bma180: Fix buffer alignment in
> >     iio_push_to_buffers_with_timestamp()
> >   iio: accel: bma220: Fix buffer alignment in
> >     iio_push_to_buffers_with_timestamp()
> >   iio: accel: hid: Fix buffer alignment in
> >     iio_push_to_buffers_with_timestamp()
> >   iio: accel: kxcjk-1013: Fix buffer alignment in
> >     iio_push_to_buffers_with_timestamp()
> >   iio: accel: mxc4005: Fix overread of data and alignment issue.
> >   iio: accel: stk8312: Fix buffer alignment in
> >     iio_push_to_buffers_with_timestamp()
> >   iio: accel: stk8ba50: Fix buffer alignment in
> >     iio_push_to_buffers_with_timestamp()
> >   iio: adc: ti-ads1015: Fix buffer alignment in
> >     iio_push_to_buffers_with_timestamp()
> >   iio: adc: vf610: Fix buffer alignment in
> >     iio_push_to_buffers_with_timestamp()
> >   iio: gyro: bmg160: Fix buffer alignment in
> >     iio_push_to_buffers_with_timestamp()
> >   iio: humidity: am2315: Fix buffer alignment in
> >     iio_push_to_buffers_with_timestamp()
> >   iio: prox: srf08: Fix buffer alignment in
> >     iio_push_to_buffers_with_timestamp()
> >   iio: prox: pulsed-light: Fix buffer alignment in
> >     iio_push_to_buffers_with_timestamp()
> >   iio: prox: as3935: Fix buffer alignment in
> >     iio_push_to_buffers_with_timestamp()
> >   iio: magn: hmc5843: Fix buffer alignment in
> >     iio_push_to_buffers_with_timestamp()
> >   iio: magn: bmc150: Fix buffer alignment in
> >     iio_push_to_buffers_with_timestamp()
> >   iio: light: isl29125: Fix buffer alignment in
> >     iio_push_to_buffers_with_timestamp()
> >   iio: light: tcs3414: Fix buffer alignment in
> >     iio_push_to_buffers_with_timestamp()
> >   iio: light: tcs3472: Fix buffer alignment in
> >     iio_push_to_buffers_with_timestamp()
> >
> >  drivers/iio/accel/bma180.c                    | 10 +++++---
> >  drivers/iio/accel/bma220_spi.c                | 10 +++++---
> >  drivers/iio/accel/hid-sensor-accel-3d.c       | 13 ++++++----
> >  drivers/iio/accel/kxcjk-1013.c                | 24 +++++++++++--------
> >  drivers/iio/accel/mxc4005.c                   | 10 +++++---
> >  drivers/iio/accel/stk8312.c                   | 12 ++++++----
> >  drivers/iio/accel/stk8ba50.c                  | 17 +++++++------
> >  drivers/iio/adc/ti-ads1015.c                  | 12 ++++++----
> >  drivers/iio/adc/vf610_adc.c                   | 10 +++++---
> >  drivers/iio/gyro/bmg160_core.c                | 10 +++++---
> >  drivers/iio/humidity/am2315.c                 | 16 ++++++++-----
> >  drivers/iio/light/isl29125.c                  | 10 +++++---
> >  drivers/iio/light/tcs3414.c                   | 10 +++++---
> >  drivers/iio/light/tcs3472.c                   | 10 +++++---
> >  drivers/iio/magnetometer/bmc150_magn.c        | 11 +++++----
> >  drivers/iio/magnetometer/hmc5843.h            |  8 +++++--
> >  drivers/iio/magnetometer/hmc5843_core.c       |  4 ++--
> >  drivers/iio/proximity/as3935.c                | 10 +++++---
> >  .../iio/proximity/pulsedlight-lidar-lite-v2.c | 10 +++++---
> >  drivers/iio/proximity/srf08.c                 | 14 +++++------
> >  20 files changed, 148 insertions(+), 83 deletions(-)
> >
> > --
> > 2.31.1
> >  
> 
>