Re: [PATCH] iio: buffer: hw-consumer: free scan_mask on buffer release

From: Jonathan Cameron

Date: Wed Apr 29 2026 - 05:26:46 EST


On Wed, 29 Apr 2026 10:04:48 +0300
Andy Shevchenko <andriy.shevchenko@xxxxxxxxx> wrote:

> On Tue, Apr 28, 2026 at 06:28:58PM +0100, Jonathan Cameron wrote:
> > On Mon, 27 Apr 2026 19:11:39 +0800
> > Felix Gu <ustc.gu@xxxxxxxxx> wrote:
> >
> > > The scan_mask lifetime changed in commit 9a2e1233d38c ("iio: buffer:
> > > hw-consumer: remove redundant scan_mask flexible array").
> > >
> > > Before that change, the scan mask storage was embedded in struct
> > > hw_consumer_buffer, so iio_hw_buf_release() could free the whole
> > > allocation with a single kfree(hw_buf).
> >
> > > That commit moved the scan mask to a separate bitmap_zalloc() allocation
> >
> > > stored in buffer.scan_mask, but left iio_hw_buf_release() unchanged.
> >
> > Hmm. This reuse of a pointer that is otherwise set via very different
> > paths sent me down a wild goose chase.
> >
> > Patch seems fine, but I'd like Nuno to take a quick look before I pick it up.
>
> Yeah, more eyeballs is better here. I spent like an hour to understand
> mysterious ways of scan_mask in IIO (we have a few of them and we have a few
> objects based on struct iio_buffer), and we have constructors/destructors for
> those objects which of that is responsible to handle scan_mask as appropriate.

Likewise on time to understand this and I wrote some of them :(

>
> May be all of this is documented somewhere?.. Dunno.

Have a guess :( Nope. This one is downright odd and only really exists
to leverage some helper functions. With hindsight I think maybe we'd
be better of separating it out so it doesn't use the same structure.

But for now we need a fix.


>
> > > Free the scan mask in iio_hw_buf_release() before freeing the buffer
> > > wrapper.
>