Re: [PATCH v3 08/27] iio:light:si1145: Fix timestamp alignment and prevent data leak.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 22 Jul 2020 22:45:59 +0300
Andy Shevchenko <andy.shevchenko@xxxxxxxxx> wrote:

> On Wed, Jul 22, 2020 at 10:43 PM Andy Shevchenko
> <andy.shevchenko@xxxxxxxxx> wrote:
> >
> > On Wed, Jul 22, 2020 at 6:53 PM Jonathan Cameron <jic23@xxxxxxxxxx> wrote:  
> > >
> > > From: Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx>
> > >
> > > One of a class of bugs pointed out by Lars in a recent review.
> > > iio_push_to_buffers_with_timestamp assumes the buffer used is aligned
> > > to the size of the timestamp (8 bytes).  This is not guaranteed in
> > > this driver which uses a 24 byte array of smaller elements on the stack.
> > > As Lars also noted this anti pattern can involve a leak of data to
> > > userspace and that indeed can happen here.  We close both issues by
> > > moving to a suitable array in the iio_priv() data with alignment
> > > explicitly requested.  This data is allocated with kzalloc so no
> > > data can leak appart from previous readings.
> > >
> > > Depending on the enabled channels, the  location of the timestamp
> > > can be at various aligned offsets through the buffer.  As such we
> > > any use of a structure to enforce this alignment would incorrectly
> > > suggest a single location for the timestamp.  
> >
> > ...
> >  
> > > +       /* Ensure timestamp will be naturally aligned if present */
> > > +       u8 buffer[24] __aligned(8);  
> >
> > Why can't we use proper structure here?
> >  
> > > @@ -445,7 +447,6 @@ static irqreturn_t si1145_trigger_handler(int irq, void *private)
> > >          *   6*2 bytes channels data + 4 bytes alignment +
> > >          *   8 bytes timestamp
> > >          */
> > > -       u8 buffer[24];  
> >
> > Seems even the old comment shows how it should look like...  
> 
> I think I understand now. Basically it's a dynamic amount of channels
> (up to 6) before you get a timestamp.
> 
Exactly.  Comment is giving the largest it can be, not what is needed for
a given configuration of the device.

Should indeed drop that comment.  Obviously went into automated mode and stopped
actually reading what was in front of me.

Jonathan





[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Input]     [Linux Kernel]     [Linux SCSI]     [X.org]

  Powered by Linux