Linux-IIO Archive on lore.kernel.org
 help / color / Atom feed
From: Jonathan Cameron <jic23@kernel.org>
To: linux-iio@vger.kernel.org
Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	Jonathan Cameron <Jonathan.Cameron@huawei.com>,
	Lars-Peter Clausen <lars@metafoo.de>,
	Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Subject: [PATCH 03/32] iio:accel:bmc150-accel: Fix timestamp alignment and prevent data leak.
Date: Sun,  7 Jun 2020 16:53:39 +0100
Message-ID: <20200607155408.958437-4-jic23@kernel.org> (raw)
In-Reply-To: <20200607155408.958437-1-jic23@kernel.org>

From: Jonathan Cameron <Jonathan.Cameron@huawei.com>

One of a class of bugs pointed out by Lars in a recent review.
iio_push_to_buffers_with_timestamp assumes the buffer used is aligned
to the size of the timestamp (8 bytes).  This is not guaranteed in
this driver which uses a 16 byte array of smaller elements on the stack.
As Lars also noted this anti pattern can involve a leak of data to
userspace and that indeed can happen here.  We close both issues by moving
to a suitable structure in the iio_priv() data with alignment
ensured by use of an explicit c structure.  This data is allocated
with kzalloc so no data can leak appart from previous readings.

Fixes tag is beyond some major refactoring so likely manual backporting
would be needed to get that far back.

Whilst the force alignment of the ts is not strictly necessary, it
does make the code less fragile.

Fixes: 3bbec9773389 ("iio: bmc150_accel: add support for hardware fifo")
Reported-by: Lars-Peter Clausen <lars@metafoo.de>
Cc: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
 drivers/iio/accel/bmc150-accel-core.c | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/drivers/iio/accel/bmc150-accel-core.c b/drivers/iio/accel/bmc150-accel-core.c
index 8f60d0727ee8..049f2632cf7a 100644
--- a/drivers/iio/accel/bmc150-accel-core.c
+++ b/drivers/iio/accel/bmc150-accel-core.c
@@ -189,6 +189,14 @@ struct bmc150_accel_data {
 	struct mutex mutex;
 	u8 fifo_mode, watermark;
 	s16 buffer[8];
+	/*
+	 * Ensure there is sufficient space and correct alignment for
+	 * the timestamp if enabled
+	 */
+	struct {
+		__le16 channels[3];
+		s64 ts __aligned(8);
+	} scan;
 	u8 bw_bits;
 	u32 slope_dur;
 	u32 slope_thres;
@@ -922,15 +930,16 @@ static int __bmc150_accel_fifo_flush(struct iio_dev *indio_dev,
 	 * now.
 	 */
 	for (i = 0; i < count; i++) {
-		u16 sample[8];
 		int j, bit;
 
 		j = 0;
 		for_each_set_bit(bit, indio_dev->active_scan_mask,
 				 indio_dev->masklength)
-			memcpy(&sample[j++], &buffer[i * 3 + bit], 2);
+			memcpy(&data->scan.channels[j++], &buffer[i * 3 + bit],
+			       2);
 
-		iio_push_to_buffers_with_timestamp(indio_dev, sample, tstamp);
+		iio_push_to_buffers_with_timestamp(indio_dev, &data->scan,
+						   tstamp);
 
 		tstamp += sample_period;
 	}
-- 
2.26.2


  parent reply index

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-07 15:53 [PATCH v2 00/32] IIO: Fused set 1 and 2 of timestamp alignment fixes Jonathan Cameron
2020-06-07 15:53 ` [PATCH 01/32] iio: accel: kxsd9: Fix alignment of local buffer Jonathan Cameron
2020-06-07 16:05   ` Andy Shevchenko
2020-06-07 16:34     ` Jonathan Cameron
2020-06-07 15:53 ` [PATCH 02/32] iio:accel:mma8452: Fix timestamp alignment and prevent data leak Jonathan Cameron
2020-06-07 15:53 ` Jonathan Cameron [this message]
2020-06-07 16:08   ` [PATCH 03/32] iio:accel:bmc150-accel: " Andy Shevchenko
2020-06-07 15:53 ` [PATCH 04/32] iio:accel:mma7455: " Jonathan Cameron
2020-06-07 15:53 ` [PATCH 05/32] iio:gyro:itg3200: " Jonathan Cameron
2020-06-07 15:53 ` [PATCH 06/32] iio:proximity:mb1232: " Jonathan Cameron
2020-06-07 15:53 ` [PATCH 07/32] iio:chemical:ccs811: " Jonathan Cameron
2020-06-07 15:53 ` [PATCH 08/32] iio:light:si1145: " Jonathan Cameron
2020-06-07 15:53 ` [PATCH 09/32] iio:light:max44000 " Jonathan Cameron
2020-06-07 15:53 ` [PATCH 10/32] iio:light:rpr0521 " Jonathan Cameron
2020-06-07 15:53 ` [PATCH 11/32] iio:light:st_uvis25 " Jonathan Cameron
2020-07-05 11:42   ` Jonathan Cameron
2020-07-05 12:05   ` Andy Shevchenko
2020-07-05 13:24     ` Jonathan Cameron
2020-06-07 15:53 ` [PATCH 12/32] iio:light:ltr501 Fix timestamp alignment issue Jonathan Cameron
2020-06-07 15:53 ` [PATCH 13/32] iio:magnetometer:ak8974: Fix alignment and data leak issues Jonathan Cameron
2020-07-05 11:43   ` Jonathan Cameron
2020-06-07 15:53 ` [PATCH 14/32] iio:magnetometer:ak8975 " Jonathan Cameron
2020-06-07 15:53 ` [PATCH 15/32] iio:magnetometer:mag3110 " Jonathan Cameron
2020-06-07 15:53 ` [PATCH 16/32] iio:humidity:hdc100x " Jonathan Cameron
2020-07-05 11:46   ` Jonathan Cameron
2020-06-07 15:53 ` [PATCH 17/32] iio:humidity:hts221 " Jonathan Cameron
2020-07-05 11:48   ` Jonathan Cameron
2020-06-07 15:53 ` [PATCH 18/32] iio:imu:bmi160 " Jonathan Cameron
2020-06-08 13:17   ` Andy Shevchenko
2020-06-08 14:03     ` Jonathan Cameron
2020-06-07 15:53 ` [PATCH 19/32] iio:imu:st_lsm6dsx " Jonathan Cameron
2020-06-07 22:33   ` Lorenzo Bianconi
2020-07-22 15:08     ` Jonathan Cameron
2020-07-22 16:02       ` Lorenzo Bianconi
2020-06-07 15:53 ` [PATCH 20/32] iio:imu:inv_mpu6050 Fix dma and ts " Jonathan Cameron
2020-06-08 10:24   ` Jean-Baptiste Maneyrol
2020-06-08 10:42     ` Andy Shevchenko
2020-06-07 15:53 ` [PATCH 21/32] iio:pressure:ms5611 Fix buffer element alignment Jonathan Cameron
2020-06-07 18:03   ` Tomasz Duszynski
2020-07-05 11:54     ` Jonathan Cameron
2020-06-07 15:53 ` [PATCH 22/32] iio:pressure:mpl3115 Force alignment of buffer Jonathan Cameron
2020-06-07 15:53 ` [PATCH 23/32] iio:adc:ti-adc081c Fix alignment and data leak issues Jonathan Cameron
2020-06-07 15:54 ` [PATCH 24/32] iio:adc:ti-adc084s021 " Jonathan Cameron
2020-06-07 15:54 ` [PATCH 25/32] iio:adc:ti-adc084s021 Tidy up endian types Jonathan Cameron
2020-06-07 15:54 ` [PATCH 26/32] iio:adc:ti-ads1015 Fix buffer element alignment Jonathan Cameron
2020-06-07 15:54 ` [PATCH 27/32] iio:adc:ti-ads124s08 Fix alignment and data leak issues Jonathan Cameron
2020-06-08 13:14   ` Andy Shevchenko
2020-06-08 14:06     ` Jonathan Cameron
2020-06-08 14:35       ` Andy Shevchenko
2020-06-07 15:54 ` [PATCH 28/32] iio:adc:ti-ads8688 Fix alignment and potential data leak issue Jonathan Cameron
2020-06-07 15:54 ` [PATCH 29/32] iio:adc:ti-adc0832 Fix alignment issue with timestamp Jonathan Cameron
2020-06-07 15:54 ` [PATCH 30/32] iio:adc:ti-adc12138 " Jonathan Cameron
2020-06-07 15:54 ` [PATCH 31/32] iio:adc:ina2xx Fix timestamp alignment issue Jonathan Cameron
2020-06-07 15:54 ` [PATCH 32/32] iio:adc:max1118 Fix alignment of timestamp and data leak issues Jonathan Cameron

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200607155408.958437-4-jic23@kernel.org \
    --to=jic23@kernel.org \
    --cc=Jonathan.Cameron@huawei.com \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=lars@metafoo.de \
    --cc=linux-iio@vger.kernel.org \
    --cc=srinivas.pandruvada@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Linux-IIO Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-iio/0 linux-iio/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-iio linux-iio/ https://lore.kernel.org/linux-iio \
		linux-iio@vger.kernel.org
	public-inbox-index linux-iio

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-iio


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git