From patchwork Tue Jun 9 17:45:27 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Greg KH X-Patchwork-Id: 187692 Delivered-To: patch@linaro.org Received: by 2002:a92:cf06:0:0:0:0:0 with SMTP id c6csp768102ilo; Tue, 9 Jun 2020 11:01:56 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwM/MEyZa4c4g7Mi7bb79qzJbCZUC59rJ6h8I4UKOvIh6PzYlwwjP8IO3OUyNmAMbtVRnOa X-Received: by 2002:a50:afc2:: with SMTP id h60mr26932755edd.110.1591725715814; Tue, 09 Jun 2020 11:01:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1591725715; cv=none; d=google.com; s=arc-20160816; b=TY5bFeg0a5BwPaJVYYH1YJwtVOmttcXCzKGGKIFLUmve9dGuLjyvQ5kTK2uvi3yvok RO4YINvqGklpDCs2Qf5BV87VE/l3XAsUxRu9/DyLizko0VrI8y2vqa0jZNmW3RKMGDqG Wyhr4X6PhtJDH8HJ6rXC3wxcrPjcQjLXjuIkUMlocABlkk2dqEA0hhLtnb+fwEYhQEKz taOc/qLnllVFSqZjxsOaRxzxNb/Gr5sC1eUvzeJFswMHVQyQneJ2uZOqDCDuQEDKp8PE OjE3iCYfCJGX/oS8zZoLl04IZqqzACKPKr73Lc0abbS50JU5uodzmIXC0Yw2xS2xDyTv gxbA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=dgBt0LQaYjXgUNjPmsg9FIck0ZlAxf/ZvWgM8/nd01g=; b=kMz675Rk1YPhTlTUDvGwhfPnJF1t5PiOiT0UFtvYz6mrFF4eAYrAnvVSTgo0ieD2ow NaXZ92s2AMRYVfTLfJKDkVx58d8AsNXkLuZo8kXwx8Xv6PmcrQ7K87Nc+WvN5EUxA92o HgnKjPr58ukGC62vKfdTU9q2lCZrxrNd2c2jqJviXvRjS0W0YsGgfz2twWOb7RJq6Y0e VVfPEEUXsJ/4syiojUf2PSBpe3Iy6Pf7ao0Od0M1xzsg2EjabutLXZz0gA1i7BPozFgy xMITwGZZyreL6z1VSFXgDdO0ov2W+fiQivVYnwOfMadQhMjfA6DDuhNag2aaL01/nqRF mWMQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=HH6LvVGA; spf=pass (google.com: domain of stable-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id sa14si10609583ejb.297.2020.06.09.11.01.55; Tue, 09 Jun 2020 11:01:55 -0700 (PDT) Received-SPF: pass (google.com: domain of stable-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=HH6LvVGA; spf=pass (google.com: domain of stable-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1733285AbgFISBv (ORCPT + 15 others); Tue, 9 Jun 2020 14:01:51 -0400 Received: from mail.kernel.org ([198.145.29.99]:45284 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731629AbgFIRx6 (ORCPT ); Tue, 9 Jun 2020 13:53:58 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id B188D20774; Tue, 9 Jun 2020 17:53:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1591725237; bh=tJ7i3gI0/ijEe7QVglU/MZNhpV1Jc+al4aF2FGTCKJs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=HH6LvVGATvXuYASpVir3jQF2Ssz1mej/7F69ejj9R/ce8autHCgtp52UZiF/10rle 6IKlPZYyWGF8gsf9h0nei2VBRpnfJTjfJszMGQQo8HXVaWP/ZTQiFc4xYZUGH6GnGA PpoV7EqgEQonVwFuoJ6iwQjfBFj9mfoJDUba6cyU= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Lars-Peter Clausen , Jonathan Cameron , Stable@vger.kernel.org, Tomasz Duszynski Subject: [PATCH 5.6 25/41] iio:chemical:pms7003: Fix timestamp alignment and prevent data leak. Date: Tue, 9 Jun 2020 19:45:27 +0200 Message-Id: <20200609174114.531191397@linuxfoundation.org> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200609174112.129412236@linuxfoundation.org> References: <20200609174112.129412236@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Jonathan Cameron commit 13e945631c2ffb946c0af342812a3cd39227de6e upstream. 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 an 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 explicitly requested. This data is allocated with kzalloc so no data can leak appart from previous readings. Fixes: a1d642266c14 ("iio: chemical: add support for Plantower PMS7003 sensor") Reported-by: Lars-Peter Clausen Signed-off-by: Jonathan Cameron Cc: Acked-by: Tomasz Duszynski Signed-off-by: Greg Kroah-Hartman --- drivers/iio/chemical/pms7003.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) --- a/drivers/iio/chemical/pms7003.c +++ b/drivers/iio/chemical/pms7003.c @@ -73,6 +73,11 @@ struct pms7003_state { struct pms7003_frame frame; struct completion frame_ready; struct mutex lock; /* must be held whenever state gets touched */ + /* Used to construct scan to push to the IIO buffer */ + struct { + u16 data[3]; /* PM1, PM2P5, PM10 */ + s64 ts; + } scan; }; static int pms7003_do_cmd(struct pms7003_state *state, enum pms7003_cmd cmd) @@ -104,7 +109,6 @@ static irqreturn_t pms7003_trigger_handl struct iio_dev *indio_dev = pf->indio_dev; struct pms7003_state *state = iio_priv(indio_dev); struct pms7003_frame *frame = &state->frame; - u16 data[3 + 1 + 4]; /* PM1, PM2P5, PM10, padding, timestamp */ int ret; mutex_lock(&state->lock); @@ -114,12 +118,15 @@ static irqreturn_t pms7003_trigger_handl goto err; } - data[PM1] = pms7003_get_pm(frame->data + PMS7003_PM1_OFFSET); - data[PM2P5] = pms7003_get_pm(frame->data + PMS7003_PM2P5_OFFSET); - data[PM10] = pms7003_get_pm(frame->data + PMS7003_PM10_OFFSET); + state->scan.data[PM1] = + pms7003_get_pm(frame->data + PMS7003_PM1_OFFSET); + state->scan.data[PM2P5] = + pms7003_get_pm(frame->data + PMS7003_PM2P5_OFFSET); + state->scan.data[PM10] = + pms7003_get_pm(frame->data + PMS7003_PM10_OFFSET); mutex_unlock(&state->lock); - iio_push_to_buffers_with_timestamp(indio_dev, data, + iio_push_to_buffers_with_timestamp(indio_dev, &state->scan, iio_get_time_ns(indio_dev)); err: iio_trigger_notify_done(indio_dev->trig);