From patchwork Tue Jun 9 17:45:14 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Greg KH X-Patchwork-Id: 187694 Delivered-To: patch@linaro.org Received: by 2002:a92:cf06:0:0:0:0:0 with SMTP id c6csp769209ilo; Tue, 9 Jun 2020 11:03:03 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw0guZRUW3ob5FgcghDVTJ6WQVHmOiF0y8uxd9YUURboFYd+zI7Phe3v1MwqXzsdBmQi4XO X-Received: by 2002:aa7:dad6:: with SMTP id x22mr28387640eds.265.1591725783313; Tue, 09 Jun 2020 11:03:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1591725783; cv=none; d=google.com; s=arc-20160816; b=XFgOHdUIc5+Filfcui8TPzI56OdfgmeJXGO3OxMGr8TjsMrLUSeGkU6et3G/OhwwJy ImY4hUUSJiSipZg/Rq1FPRA6PNdGf8c7m96sCDuOEvHZ6ZRSo0YtsfrwQA1y1CMSTnX2 P0dMrJD+NPEmFpkOl1/8SsfihxRfN8T8yZ/dnQ+Ae/4qmiUnOXTd6nP4PZr0Rztd6atg asOZ9gfgNiLU+8TxwDxu2s9ClNSqtsc5iY72TyUboshu0ymHU3yEs1JEBjZG/OcrGbhM hHj14FPS2hcunwoBTWmnIoj8dgPVXwex3gnepUAPYFSpyV3+0EKZMZOZ/Zn9qD0Pg5l+ vQmg== 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=s+gZvhJBgXTYxGzLyMGI7had1g5ss3jjTelZSOZO9UzRSYbgmyajgASwwfczA0ajyl NMVJnn49dIrtLJNNy/oweJGvG3L+FZFtbzK4/8w+55m2Kg7SXvGOPiZjnju4voZZaqP1 YUFofbZXSW/5ivPnehdSLK0nUcn93qpZA4gGuXulqdlCUgoYM3JDPJdkhSRyhTywCSo0 sVMRdSLTZi1wf49XWlHfIlvGwHDkDqZxAVy4QH2C3NSNg6CNitjn1o7NY/BQXuxif+kK h/iQpGLkQuEdiHLJXhk3hJXFaibpO/6DaDQUYeFjpPOsJtcKxg8t9iDGksozAyycZUwv f7/w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=mvI099iC; 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 gv4si11016951ejb.565.2020.06.09.11.03.03; Tue, 09 Jun 2020 11:03:03 -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=mvI099iC; 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 S1733002AbgFISDA (ORCPT + 15 others); Tue, 9 Jun 2020 14:03:00 -0400 Received: from mail.kernel.org ([198.145.29.99]:43744 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732985AbgFIRxD (ORCPT ); Tue, 9 Jun 2020 13:53:03 -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 C61B0207C3; Tue, 9 Jun 2020 17:53:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1591725183; bh=tJ7i3gI0/ijEe7QVglU/MZNhpV1Jc+al4aF2FGTCKJs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mvI099iCC1Xomkd3DHQmrDXKnJaHLRREPrTNFQLCXpyWSo9KRwMUuhthmMDWygIhw pYuUAUvTungBGmQ1wCinnwgrZlycNuRMixnNvWAgSwsg2Ih6wN4t0rpoqh29jtmh3j aJYL6Md/eWrSb/Te/vrZ11/YFQLaQxkY81kEhXbo= 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.4 18/34] iio:chemical:pms7003: Fix timestamp alignment and prevent data leak. Date: Tue, 9 Jun 2020 19:45:14 +0200 Message-Id: <20200609174054.904245534@linuxfoundation.org> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200609174052.628006868@linuxfoundation.org> References: <20200609174052.628006868@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);