linux-iio.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jonathan Cameron <jic23@kernel.org>
To: linux-iio@vger.kernel.org
Cc: Andy Shevchenko <andy.shevchenko@gmail.com>,
	Lars-Peter Clausen <lars@metafoo.de>,
	Peter Meerwald <pmeerw@pmeerw.net>,
	Jonathan Cameron <Jonathan.Cameron@huawei.com>,
	Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Subject: [PATCH v3 03/27] iio:accel:bmc150-accel: Fix timestamp alignment and prevent data leak.
Date: Wed, 22 Jul 2020 16:50:39 +0100	[thread overview]
Message-ID: <20200722155103.979802-4-jic23@kernel.org> (raw)
In-Reply-To: <20200722155103.979802-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 24864d9dfab5..48435865fdaf 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],
+			       sizeof(data->scan.channels[0]));
 
-		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.27.0


  parent reply	other threads:[~2020-07-22 15:53 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-22 15:50 [PATCH v3 00/27] IIO: Fused set 1 and 2 of timestamp alignment fixes Jonathan Cameron
2020-07-22 15:50 ` [PATCH v3 01/27] iio: accel: kxsd9: Fix alignment of local buffer Jonathan Cameron
2020-08-09 17:07   ` Jonathan Cameron
2020-07-22 15:50 ` [PATCH v3 02/27] iio:accel:mma8452: Fix timestamp alignment and prevent data leak Jonathan Cameron
2020-08-09 17:14   ` Jonathan Cameron
2020-07-22 15:50 ` Jonathan Cameron [this message]
2020-07-29 17:12   ` [PATCH v3 03/27] iio:accel:bmc150-accel: " Srinivas Pandruvada
2020-08-09 17:18     ` Jonathan Cameron
2020-07-22 15:50 ` [PATCH v3 04/27] iio:accel:mma7455: " Jonathan Cameron
2020-08-09 17:19   ` Jonathan Cameron
2020-07-22 15:50 ` [PATCH v3 05/27] iio:gyro:itg3200: " Jonathan Cameron
2020-09-19 15:41   ` Jonathan Cameron
2020-07-22 15:50 ` [PATCH v3 06/27] iio:proximity:mb1232: " Jonathan Cameron
2020-08-09 17:20   ` Jonathan Cameron
2020-07-22 15:50 ` [PATCH v3 07/27] iio:chemical:ccs811: " Jonathan Cameron
2020-08-09 17:23   ` Jonathan Cameron
2020-07-22 15:50 ` [PATCH v3 08/27] iio:light:si1145: " Jonathan Cameron
2020-07-22 19:43   ` Andy Shevchenko
2020-07-22 19:45     ` Andy Shevchenko
2020-07-23 11:25       ` Jonathan Cameron
2020-09-19 15:46         ` Jonathan Cameron
2020-07-22 15:50 ` [PATCH v3 09/27] iio:light:max44000 " Jonathan Cameron
2020-08-09 17:24   ` Jonathan Cameron
2020-07-22 15:50 ` [PATCH v3 10/27] iio:light:rpr0521 " Jonathan Cameron
2020-07-22 19:47   ` Andy Shevchenko
2020-07-23 11:29     ` Jonathan Cameron
2020-09-19 16:31       ` Jonathan Cameron
2020-07-22 15:50 ` [PATCH v3 11/27] iio:light:st_uvis25 " Jonathan Cameron
2020-07-22 19:48   ` Andy Shevchenko
2020-07-22 15:50 ` [PATCH v3 12/27] iio:light:ltr501 Fix timestamp alignment issue Jonathan Cameron
2020-08-09 17:27   ` Jonathan Cameron
2020-07-22 15:50 ` [PATCH v3 13/27] iio:magnetometer:ak8975 Fix alignment and data leak issues Jonathan Cameron
2020-08-09 17:30   ` Jonathan Cameron
2020-07-22 15:50 ` [PATCH v3 14/27] iio:magnetometer:mag3110 " Jonathan Cameron
2020-07-23 12:13   ` Andy Shevchenko
2020-07-22 15:50 ` [PATCH v3 15/27] iio:imu:bmi160 " Jonathan Cameron
2020-09-19 15:58   ` Jonathan Cameron
2020-07-22 15:50 ` [PATCH v3 16/27] iio:imu:st_lsm6dsx " Jonathan Cameron
2020-09-19 16:09   ` Jonathan Cameron
2020-07-22 15:50 ` [PATCH v3 17/27] iio:imu:inv_mpu6050 Fix dma and ts " Jonathan Cameron
2020-07-24  8:27   ` Jean-Baptiste Maneyrol
2020-09-19 16:51     ` Jonathan Cameron
2020-07-22 15:50 ` [PATCH v3 18/27] iio:imu:inv_mpu6050: Use regmap_noinc_read for fifo reads Jonathan Cameron
2020-07-23 12:15   ` Andy Shevchenko
2020-07-23 12:28     ` Jonathan Cameron
2020-07-24  8:29   ` Jean-Baptiste Maneyrol
2020-09-19 16:55     ` Jonathan Cameron
2020-07-22 15:50 ` [PATCH v3 19/27] iio:pressure:mpl3115 Force alignment of buffer Jonathan Cameron
2020-07-23 12:17   ` Andy Shevchenko
2020-07-23 12:31     ` Jonathan Cameron
2020-09-19 17:02       ` Jonathan Cameron
2020-07-22 15:50 ` [PATCH v3 20/27] iio:adc:ti-adc081c Fix alignment and data leak issues Jonathan Cameron
2020-08-09 17:34   ` Jonathan Cameron
2020-07-22 15:50 ` [PATCH v3 21/27] iio:adc:ti-adc084s021 " Jonathan Cameron
2020-08-09 17:36   ` Jonathan Cameron
2020-07-22 15:50 ` [PATCH v3 22/27] iio:adc:ti-adc084s021 Tidy up endian types Jonathan Cameron
2020-08-09 17:47   ` Jonathan Cameron
2020-09-13 12:01     ` Jonathan Cameron
2020-09-13 12:06       ` Jonathan Cameron
2020-11-29 13:28         ` Jonathan Cameron
2020-07-22 15:50 ` [PATCH v3 23/27] iio:adc:ti-ads124s08 Fix alignment and data leak issues Jonathan Cameron
2020-07-22 20:54   ` Andy Shevchenko
2020-07-23 11:23     ` Jonathan Cameron
2020-07-22 15:51 ` [PATCH v3 24/27] iio:adc:ti-adc0832 Fix alignment issue with timestamp Jonathan Cameron
2020-09-19 16:18   ` Jonathan Cameron
2020-07-22 15:51 ` [PATCH v3 25/27] iio:adc:ti-adc12138 " Jonathan Cameron
2020-09-19 16:21   ` Jonathan Cameron
2020-07-22 15:51 ` [PATCH v3 26/27] iio:adc:ina2xx Fix timestamp alignment issue Jonathan Cameron
2020-08-09 17:38   ` Jonathan Cameron
2020-07-22 15:51 ` [PATCH v3 27/27] iio:adc:max1118 Fix alignment of timestamp and data leak issues Jonathan Cameron
2020-08-09 17:39   ` Jonathan Cameron
2020-07-23 12:23 ` [PATCH v3 00/27] IIO: Fused set 1 and 2 of timestamp alignment fixes Andy Shevchenko

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=20200722155103.979802-4-jic23@kernel.org \
    --to=jic23@kernel.org \
    --cc=Jonathan.Cameron@huawei.com \
    --cc=andy.shevchenko@gmail.com \
    --cc=lars@metafoo.de \
    --cc=linux-iio@vger.kernel.org \
    --cc=pmeerw@pmeerw.net \
    --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
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).