* [PATCH] iio: pressure: bmp280: zero-init bmp580 trigger handler buffer
@ 2026-05-05 17:34 David Carlier
2026-05-06 9:14 ` Andy Shevchenko
0 siblings, 1 reply; 4+ messages in thread
From: David Carlier @ 2026-05-05 17:34 UTC (permalink / raw)
To: Jonathan Cameron
Cc: dlechner, nuno.sa, andy, linux-iio, linux-kernel, stable,
David Carlier
bmp580_trigger_handler() builds an on-stack scan buffer containing
two __le32 fields and an aligned_s64 timestamp, and pushes it to
userspace via iio_push_to_buffers_with_ts(). However, only the low
3 bytes of each __le32 field are populated by the device data:
memcpy(&buffer.comp_press, &data->buf[3], 3);
memcpy(&buffer.comp_temp, &data->buf[0], 3);
The high byte of each field is left uninitialised on the stack.
The bmp580 channels declare storagebits = 32, so the IIO core
transports all four bytes per sample to userspace as part of the
scan element, leaking two bytes of kernel stack per scan.
Zero-initialise the buffer before populating it, mirroring the fix
applied to bme280_trigger_handler() in commit 018f50909e66 ("iio:
bmp280: zero-init buffer").
Fixes: 872c8014e05e ("iio: pressure: bmp280: drop sensor_data array")
Cc: stable@vger.kernel.org
Signed-off-by: David Carlier <devnexen@gmail.com>
---
drivers/iio/pressure/bmp280-core.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/iio/pressure/bmp280-core.c b/drivers/iio/pressure/bmp280-core.c
index f37f20776c89..431476cff883 100644
--- a/drivers/iio/pressure/bmp280-core.c
+++ b/drivers/iio/pressure/bmp280-core.c
@@ -2623,6 +2623,8 @@ static irqreturn_t bmp580_trigger_handler(int irq, void *p)
} buffer;
int ret;
+ memset(&buffer, 0, sizeof(buffer));
+
guard(mutex)(&data->lock);
/* Burst read data registers */
--
2.53.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] iio: pressure: bmp280: zero-init bmp580 trigger handler buffer
2026-05-05 17:34 [PATCH] iio: pressure: bmp280: zero-init bmp580 trigger handler buffer David Carlier
@ 2026-05-06 9:14 ` Andy Shevchenko
2026-05-16 10:25 ` Jonathan Cameron
0 siblings, 1 reply; 4+ messages in thread
From: Andy Shevchenko @ 2026-05-06 9:14 UTC (permalink / raw)
To: David Carlier
Cc: Jonathan Cameron, dlechner, nuno.sa, andy, linux-iio,
linux-kernel, stable
On Tue, May 05, 2026 at 06:34:55PM +0100, David Carlier wrote:
> bmp580_trigger_handler() builds an on-stack scan buffer containing
> two __le32 fields and an aligned_s64 timestamp, and pushes it to
> userspace via iio_push_to_buffers_with_ts(). However, only the low
> 3 bytes of each __le32 field are populated by the device data:
>
> memcpy(&buffer.comp_press, &data->buf[3], 3);
> memcpy(&buffer.comp_temp, &data->buf[0], 3);
>
> The high byte of each field is left uninitialised on the stack.
> The bmp580 channels declare storagebits = 32, so the IIO core
> transports all four bytes per sample to userspace as part of the
> scan element, leaking two bytes of kernel stack per scan.
>
> Zero-initialise the buffer before populating it, mirroring the fix
> applied to bme280_trigger_handler() in commit 018f50909e66 ("iio:
> bmp280: zero-init buffer").
Same Q, is any part of the above, including the initial report/analysis
AI assisted? If so, you have to mentioned this in the respective
Reported-by:/Closes:/et cetera tags.
...
> } buffer;
} buffer = { };
will suffice.
> int ret;
>
> + memset(&buffer, 0, sizeof(buffer));
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] iio: pressure: bmp280: zero-init bmp580 trigger handler buffer
2026-05-06 9:14 ` Andy Shevchenko
@ 2026-05-16 10:25 ` Jonathan Cameron
2026-05-16 10:37 ` David CARLIER
0 siblings, 1 reply; 4+ messages in thread
From: Jonathan Cameron @ 2026-05-16 10:25 UTC (permalink / raw)
To: Andy Shevchenko
Cc: David Carlier, dlechner, nuno.sa, andy, linux-iio, linux-kernel,
stable
On Wed, 6 May 2026 12:14:12 +0300
Andy Shevchenko <andriy.shevchenko@intel.com> wrote:
> On Tue, May 05, 2026 at 06:34:55PM +0100, David Carlier wrote:
> > bmp580_trigger_handler() builds an on-stack scan buffer containing
> > two __le32 fields and an aligned_s64 timestamp, and pushes it to
> > userspace via iio_push_to_buffers_with_ts(). However, only the low
> > 3 bytes of each __le32 field are populated by the device data:
> >
> > memcpy(&buffer.comp_press, &data->buf[3], 3);
> > memcpy(&buffer.comp_temp, &data->buf[0], 3);
> >
> > The high byte of each field is left uninitialised on the stack.
> > The bmp580 channels declare storagebits = 32, so the IIO core
> > transports all four bytes per sample to userspace as part of the
> > scan element, leaking two bytes of kernel stack per scan.
> >
> > Zero-initialise the buffer before populating it, mirroring the fix
> > applied to bme280_trigger_handler() in commit 018f50909e66 ("iio:
> > bmp280: zero-init buffer").
>
> Same Q, is any part of the above, including the initial report/analysis
> AI assisted? If so, you have to mentioned this in the respective
> Reported-by:/Closes:/et cetera tags.
David, these questions are outstanding if you have time to look at them.
I might be ok adding tags.
Rather than risk losing the fix I've applied it with the tweak
as Andy suggests below.
Thanks,
Jonathan
>
> ...
>
> > } buffer;
>
> } buffer = { };
>
> will suffice.
>
> > int ret;
> >
> > + memset(&buffer, 0, sizeof(buffer));
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] iio: pressure: bmp280: zero-init bmp580 trigger handler buffer
2026-05-16 10:25 ` Jonathan Cameron
@ 2026-05-16 10:37 ` David CARLIER
0 siblings, 0 replies; 4+ messages in thread
From: David CARLIER @ 2026-05-16 10:37 UTC (permalink / raw)
To: Jonathan Cameron
Cc: Andy Shevchenko, dlechner, nuno.sa, andy, linux-iio, linux-kernel,
stable
Hi Jonathan,
sorry those messages had been buried among others, I just missed them,
apologies for the slow reply.
On Sat, 16 May 2026 at 11:25, Jonathan Cameron <jic23@kernel.org> wrote:
>
> On Wed, 6 May 2026 12:14:12 +0300
> Andy Shevchenko <andriy.shevchenko@intel.com> wrote:
>
> > On Tue, May 05, 2026 at 06:34:55PM +0100, David Carlier wrote:
> > > bmp580_trigger_handler() builds an on-stack scan buffer containing
> > > two __le32 fields and an aligned_s64 timestamp, and pushes it to
> > > userspace via iio_push_to_buffers_with_ts(). However, only the low
> > > 3 bytes of each __le32 field are populated by the device data:
> > >
> > > memcpy(&buffer.comp_press, &data->buf[3], 3);
> > > memcpy(&buffer.comp_temp, &data->buf[0], 3);
> > >
> > > The high byte of each field is left uninitialised on the stack.
> > > The bmp580 channels declare storagebits = 32, so the IIO core
> > > transports all four bytes per sample to userspace as part of the
> > > scan element, leaking two bytes of kernel stack per scan.
> > >
> > > Zero-initialise the buffer before populating it, mirroring the fix
> > > applied to bme280_trigger_handler() in commit 018f50909e66 ("iio:
> > > bmp280: zero-init buffer").
> >
> > Same Q, is any part of the above, including the initial report/analysis
> > AI assisted? If so, you have to mentioned this in the respective
> > Reported-by:/Closes:/et cetera tags.
>
> David, these questions are outstanding if you have time to look at them.
> I might be ok adding tags.
>
> Rather than risk losing the fix I've applied it with the tweak
> as Andy suggests below.
>
> Thanks,
>
> Jonathan
>
> >
> > ...
> >
> > > } buffer;
> >
> > } buffer = { };
> >
> > will suffice.
> >
> > > int ret;
> > >
> > > + memset(&buffer, 0, sizeof(buffer));
> >
>
To answer Andy's question: yes, the bug was found during an
AI-assisted audit of IIO trigger-handler scan buffers (Claude,
Anthropic). The tool flagged the partial 3-byte memcpy into a
32-bit storagebits scan element; I confirmed the leak by reading
the surrounding code (storagebits/realbits in the channel spec
and the iio_push_to_buffers_with_ts() path) and by checking the
prior fix 018f50909e66 ("iio: bmp280: zero-init buffer") that
addresses the analogous bme280 case. I have not exercised the
bmp580 path on hardware.
I'm happy with whatever tag form you prefer. A note in the
changelog along the lines of:
Reported-by: Claude 4.6 at the time I believe
or simply a sentence in the commit body stating the analysis was
AI-assisted, would both be fine by me.
Thanks,
David
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-05-16 10:37 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-05 17:34 [PATCH] iio: pressure: bmp280: zero-init bmp580 trigger handler buffer David Carlier
2026-05-06 9:14 ` Andy Shevchenko
2026-05-16 10:25 ` Jonathan Cameron
2026-05-16 10:37 ` David CARLIER
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox