]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
iio: imu: adis16550: fix stack leak in trigger handler
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 9 Apr 2026 13:40:49 +0000 (15:40 +0200)
committerJonathan Cameron <jic23@kernel.org>
Fri, 15 May 2026 11:01:38 +0000 (12:01 +0100)
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>
Reviewed-by: David Lechner <dlechner@baylibre.com>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
drivers/iio/imu/adis16550.c

index 1f2af506f4bdd5d31445af9f5d37b753c801d611..75679612052f2cfe7dc2961345229c5af0f08894 100644 (file)
@@ -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);