* [PATCH 1/3] iio: pressure: bmp280: fix stack leak in bmp580 trigger handler
@ 2026-04-09 13:40 Greg Kroah-Hartman
2026-04-09 13:40 ` [PATCH 2/3] iio: imu: st_lsm6dsx: fix stack leak in tagged FIFO buffer Greg Kroah-Hartman
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Greg Kroah-Hartman @ 2026-04-09 13:40 UTC (permalink / raw)
To: linux-iio
Cc: linux-kernel, Greg Kroah-Hartman, Jonathan Cameron, David Lechner,
Nuno Sá, Andy Shevchenko, stable
bmp580_trigger_handler() declares its scan buffer on the stack without
an initializer and then memcpy()s 3 bytes of 24-bit sensor data into
each 4-byte __le32 field. The high byte of comp_temp and comp_press is
left uninitialized, and the channel storagebits is 32, so two bytes of
stack are pushed to userspace per scan.
This is a regression from when the buffer lived in the private data, the
move to a stack-local struct dropped the implicit zeroing.
bme280_trigger_handler() was fixed up to handle this bug, but this
driver was not fixed because there was no padding hole, but rather a
short-fill issue.
Fix this all by just zero-initializing the structure on the stack.
Cc: Jonathan Cameron <jic23@kernel.org>
Cc: David Lechner <dlechner@baylibre.com>
Cc: "Nuno Sá" <nuno.sa@analog.com>
Cc: Andy Shevchenko <andy@kernel.org>
Fixes: 872c8014e05e ("iio: pressure: bmp280: drop sensor_data array")
Cc: stable <stable@kernel.org>
Assisted-by: gregkh_clanker_t1000
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/iio/pressure/bmp280-core.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/iio/pressure/bmp280-core.c b/drivers/iio/pressure/bmp280-core.c
index d983ce9c0b99..9b489766e457 100644
--- a/drivers/iio/pressure/bmp280-core.c
+++ b/drivers/iio/pressure/bmp280-core.c
@@ -2616,7 +2616,7 @@ static irqreturn_t bmp580_trigger_handler(int irq, void *p)
__le32 comp_temp;
__le32 comp_press;
aligned_s64 timestamp;
- } buffer;
+ } buffer = { };
int ret;
guard(mutex)(&data->lock);
--
2.53.0
^ permalink raw reply related [flat|nested] 6+ messages in thread* [PATCH 2/3] iio: imu: st_lsm6dsx: fix stack leak in tagged FIFO buffer
2026-04-09 13:40 [PATCH 1/3] iio: pressure: bmp280: fix stack leak in bmp580 trigger handler Greg Kroah-Hartman
@ 2026-04-09 13:40 ` Greg Kroah-Hartman
2026-04-09 15:25 ` David Lechner
2026-04-09 13:40 ` [PATCH 3/3] iio: imu: adis16550: fix stack leak in trigger handler Greg Kroah-Hartman
2026-04-09 15:01 ` [PATCH 1/3] iio: pressure: bmp280: fix stack leak in bmp580 " David Lechner
2 siblings, 1 reply; 6+ messages in thread
From: Greg Kroah-Hartman @ 2026-04-09 13:40 UTC (permalink / raw)
To: linux-iio
Cc: linux-kernel, Greg Kroah-Hartman, Lorenzo Bianconi,
Jonathan Cameron, David Lechner, Nuno Sá, Andy Shevchenko,
stable
The tagged FIFO path declares iio_buff on the stack with __aligned(8)
but no initializer, but there is a hole in the structure, which will
then leak to userspace as ST_LSM6DSX_SAMPLE_SIZE bytes (6) will be
copied, but the space between that and the timestamp are not
initialized.
Commit c14edb4d0bdc ("iio:imu:st_lsm6dsx Fix alignment and data leak
issues") moved the untagged FIFO path to a kzalloc'd buffer in hw->scan,
but for the tagged path it only added the alignment qualifier and not
the initializer :(
Fix this by just zero-initializing the structure on the stack.
Cc: Lorenzo Bianconi <lorenzo@kernel.org>
Cc: Jonathan Cameron <jic23@kernel.org>
Cc: David Lechner <dlechner@baylibre.com>
Cc: "Nuno Sá" <nuno.sa@analog.com>
Cc: Andy Shevchenko <andy@kernel.org>
Fixes: c14edb4d0bdc ("iio:imu:st_lsm6dsx Fix alignment and data leak issues")
Cc: stable <stable@kernel.org>
Assisted-by: gregkh_clanker_t1000
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c
index 5b28a3ffcc3d..48291203d1cd 100644
--- a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c
+++ b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c
@@ -609,7 +609,7 @@ int st_lsm6dsx_read_tagged_fifo(struct st_lsm6dsx_hw *hw)
* must be passed a buffer that is aligned to 8 bytes so
* as to allow insertion of a naturally aligned timestamp.
*/
- u8 iio_buff[ST_LSM6DSX_IIO_BUFF_SIZE] __aligned(8);
+ u8 iio_buff[ST_LSM6DSX_IIO_BUFF_SIZE] __aligned(8) = { };
u8 tag;
bool reset_ts = false;
int i, err, read_len;
--
2.53.0
^ permalink raw reply related [flat|nested] 6+ messages in thread* Re: [PATCH 2/3] iio: imu: st_lsm6dsx: fix stack leak in tagged FIFO buffer
2026-04-09 13:40 ` [PATCH 2/3] iio: imu: st_lsm6dsx: fix stack leak in tagged FIFO buffer Greg Kroah-Hartman
@ 2026-04-09 15:25 ` David Lechner
0 siblings, 0 replies; 6+ messages in thread
From: David Lechner @ 2026-04-09 15:25 UTC (permalink / raw)
To: Greg Kroah-Hartman, linux-iio
Cc: linux-kernel, Lorenzo Bianconi, Jonathan Cameron, Nuno Sá,
Andy Shevchenko, stable
On 4/9/26 8:40 AM, Greg Kroah-Hartman wrote:
> The tagged FIFO path declares iio_buff on the stack with __aligned(8)
> but no initializer, but there is a hole in the structure, which will
> then leak to userspace as ST_LSM6DSX_SAMPLE_SIZE bytes (6) will be
> copied, but the space between that and the timestamp are not
> initialized.
>
> Commit c14edb4d0bdc ("iio:imu:st_lsm6dsx Fix alignment and data leak
> issues") moved the untagged FIFO path to a kzalloc'd buffer in hw->scan,
> but for the tagged path it only added the alignment qualifier and not
> the initializer :(
>
> Fix this by just zero-initializing the structure on the stack.
>
Reviewed-by: David Lechner <dlechner@baylibre.com>
>
> diff --git a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c
> index 5b28a3ffcc3d..48291203d1cd 100644
> --- a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c
> +++ b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c
> @@ -609,7 +609,7 @@ int st_lsm6dsx_read_tagged_fifo(struct st_lsm6dsx_hw *hw)
> * must be passed a buffer that is aligned to 8 bytes so
> * as to allow insertion of a naturally aligned timestamp.
> */
> - u8 iio_buff[ST_LSM6DSX_IIO_BUFF_SIZE] __aligned(8);
> + u8 iio_buff[ST_LSM6DSX_IIO_BUFF_SIZE] __aligned(8) = { };
Looks like a case where we could follow this up with a patch to
use IIO_DECLARE_BUF_WITH_TS().
> u8 tag;
> bool reset_ts = false;
> int i, err, read_len;
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 3/3] iio: imu: adis16550: fix stack leak in trigger handler
2026-04-09 13:40 [PATCH 1/3] iio: pressure: bmp280: fix stack leak in bmp580 trigger handler Greg Kroah-Hartman
2026-04-09 13:40 ` [PATCH 2/3] iio: imu: st_lsm6dsx: fix stack leak in tagged FIFO buffer Greg Kroah-Hartman
@ 2026-04-09 13:40 ` Greg Kroah-Hartman
2026-04-09 15:29 ` David Lechner
2026-04-09 15:01 ` [PATCH 1/3] iio: pressure: bmp280: fix stack leak in bmp580 " David Lechner
2 siblings, 1 reply; 6+ messages in thread
From: Greg Kroah-Hartman @ 2026-04-09 13:40 UTC (permalink / raw)
To: linux-iio
Cc: linux-kernel, Greg Kroah-Hartman, Lars-Peter Clausen,
Michael Hennerich, Jonathan Cameron, David Lechner, Nuno Sá,
Andy Shevchenko, stable
adis16550_trigger_handler() declares the scan data array on the stack
without initializing it. The memcpy() at the bottom fills only the
first 28 bytes (TEMP + 6 channels of GYRO/ACCEL data), and
iio_push_to_buffers_with_timestamp() writes the s64 timestamp at the
8-byte-aligned offset 32. Bytes 28-31 remain uninitialized stack data
which leaks to userspace on ever trigger.
Fix this all by just zero-initializing the structure on the stack.
Cc: Lars-Peter Clausen <lars@metafoo.de>
Cc: Michael Hennerich <Michael.Hennerich@analog.com>
Cc: Jonathan Cameron <jic23@kernel.org>
Cc: David Lechner <dlechner@baylibre.com>
Cc: "Nuno Sá" <nuno.sa@analog.com>
Cc: Andy Shevchenko <andy@kernel.org>
Fixes: e4570f4bb231 ("iio: imu: adis16550: align buffers for timestamp")
Cc: stable <stable@kernel.org>
Assisted-by: gregkh_clanker_t1000
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/iio/imu/adis16550.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/iio/imu/adis16550.c b/drivers/iio/imu/adis16550.c
index 1f2af506f4bd..75679612052f 100644
--- a/drivers/iio/imu/adis16550.c
+++ b/drivers/iio/imu/adis16550.c
@@ -836,7 +836,7 @@ static irqreturn_t adis16550_trigger_handler(int irq, void *p)
u16 dummy;
bool valid;
struct iio_poll_func *pf = p;
- __be32 data[ADIS16550_MAX_SCAN_DATA] __aligned(8);
+ __be32 data[ADIS16550_MAX_SCAN_DATA] __aligned(8) = { };
struct iio_dev *indio_dev = pf->indio_dev;
struct adis16550 *st = iio_priv(indio_dev);
struct adis *adis = iio_device_get_drvdata(indio_dev);
--
2.53.0
^ permalink raw reply related [flat|nested] 6+ messages in thread* Re: [PATCH 3/3] iio: imu: adis16550: fix stack leak in trigger handler
2026-04-09 13:40 ` [PATCH 3/3] iio: imu: adis16550: fix stack leak in trigger handler Greg Kroah-Hartman
@ 2026-04-09 15:29 ` David Lechner
0 siblings, 0 replies; 6+ messages in thread
From: David Lechner @ 2026-04-09 15:29 UTC (permalink / raw)
To: Greg Kroah-Hartman, linux-iio
Cc: linux-kernel, Lars-Peter Clausen, Michael Hennerich,
Jonathan Cameron, Nuno Sá, Andy Shevchenko, stable
On 4/9/26 8:40 AM, Greg Kroah-Hartman wrote:
> adis16550_trigger_handler() declares the scan data array on the stack
> without initializing it. The memcpy() at the bottom fills only the
> first 28 bytes (TEMP + 6 channels of GYRO/ACCEL data), and
> iio_push_to_buffers_with_timestamp() writes the s64 timestamp at the
> 8-byte-aligned offset 32. Bytes 28-31 remain uninitialized stack data
> which leaks to userspace on ever trigger.
>
> Fix this all by just zero-initializing the structure on the stack.
>
Reviewed-by: David Lechner <dlechner@baylibre.com>
>
> diff --git a/drivers/iio/imu/adis16550.c b/drivers/iio/imu/adis16550.c
> index 1f2af506f4bd..75679612052f 100644
> --- a/drivers/iio/imu/adis16550.c
> +++ b/drivers/iio/imu/adis16550.c
> @@ -836,7 +836,7 @@ static irqreturn_t adis16550_trigger_handler(int irq, void *p)
> u16 dummy;
> bool valid;
> struct iio_poll_func *pf = p;
> - __be32 data[ADIS16550_MAX_SCAN_DATA] __aligned(8);
> + __be32 data[ADIS16550_MAX_SCAN_DATA] __aligned(8) = { };
And another case where a followup patch to use IIO_DECLARE_BUFFER_WITH_TS()
would be appropriate.
> struct iio_dev *indio_dev = pf->indio_dev;
> struct adis16550 *st = iio_priv(indio_dev);
> struct adis *adis = iio_device_get_drvdata(indio_dev);
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/3] iio: pressure: bmp280: fix stack leak in bmp580 trigger handler
2026-04-09 13:40 [PATCH 1/3] iio: pressure: bmp280: fix stack leak in bmp580 trigger handler Greg Kroah-Hartman
2026-04-09 13:40 ` [PATCH 2/3] iio: imu: st_lsm6dsx: fix stack leak in tagged FIFO buffer Greg Kroah-Hartman
2026-04-09 13:40 ` [PATCH 3/3] iio: imu: adis16550: fix stack leak in trigger handler Greg Kroah-Hartman
@ 2026-04-09 15:01 ` David Lechner
2 siblings, 0 replies; 6+ messages in thread
From: David Lechner @ 2026-04-09 15:01 UTC (permalink / raw)
To: Greg Kroah-Hartman, linux-iio
Cc: linux-kernel, Jonathan Cameron, Nuno Sá, Andy Shevchenko,
stable
On 4/9/26 8:40 AM, Greg Kroah-Hartman wrote:
> bmp580_trigger_handler() declares its scan buffer on the stack without
> an initializer and then memcpy()s 3 bytes of 24-bit sensor data into
> each 4-byte __le32 field. The high byte of comp_temp and comp_press is
> left uninitialized, and the channel storagebits is 32, so two bytes of
> stack are pushed to userspace per scan.
>
> This is a regression from when the buffer lived in the private data, the
> move to a stack-local struct dropped the implicit zeroing.
> bme280_trigger_handler() was fixed up to handle this bug, but this
> driver was not fixed because there was no padding hole, but rather a
> short-fill issue.
>
> Fix this all by just zero-initializing the structure on the stack.
>
Reviewed-by: David Lechner <dlechner@baylibre.com>
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2026-04-09 15:29 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-09 13:40 [PATCH 1/3] iio: pressure: bmp280: fix stack leak in bmp580 trigger handler Greg Kroah-Hartman
2026-04-09 13:40 ` [PATCH 2/3] iio: imu: st_lsm6dsx: fix stack leak in tagged FIFO buffer Greg Kroah-Hartman
2026-04-09 15:25 ` David Lechner
2026-04-09 13:40 ` [PATCH 3/3] iio: imu: adis16550: fix stack leak in trigger handler Greg Kroah-Hartman
2026-04-09 15:29 ` David Lechner
2026-04-09 15:01 ` [PATCH 1/3] iio: pressure: bmp280: fix stack leak in bmp580 " David Lechner
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox