mirror of
https://github.com/torvalds/linux.git
synced 2026-06-04 12:35:52 +02:00
iio: imu: adis16550: fix stack leak in trigger handler
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: e4570f4bb2 ("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>
This commit is contained in:
parent
c9d8e9adaa
commit
474f8928d5
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user