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 Thu, 23 Jul 2020 12:25:17 +0100
Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx> wrote:

> 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.

I've adjusted the comment as requested by Andy (and moved it!).  Fits
under Andy's class 2 so applied to the togreg branch of iio.git and marked
for stable.  No great rush for this, beyond the fact that I'll keep forgetting
to actually sort these out!

Thanks,

Jonathan

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