From patchwork Tue Jun 9 17:45:39 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Greg Kroah-Hartman X-Patchwork-Id: 187689 Delivered-To: patch@linaro.org Received: by 2002:a92:cf06:0:0:0:0:0 with SMTP id c6csp765418ilo; Tue, 9 Jun 2020 10:58:37 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyTWhutSTcCpw/WBFfedN+zL3MeeOdArVBacIBZfGdluU2Y3Ul1gS5m9d3syd3+bysM29Er X-Received: by 2002:a17:906:c10f:: with SMTP id do15mr27749343ejc.249.1591725517086; Tue, 09 Jun 2020 10:58:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1591725517; cv=none; d=google.com; s=arc-20160816; b=C4vd2J/l02hbo271I0QRRvNR0EWemtjPbyaX6s/SYjIv2LkY3Ax7VfPhW5R9CV3k9T bkdt8PkVcQC7EdvPi5bpTBA6G0l41dnBNT1HpMIbgAKBJFPlp2LKOwJzSmWntdkFKITC n3dsUMBoVTM4SKYtNxl5SP1B1BKrXhYS2RnPx983e4RILbDKmaJtOGRqi3SE3bx720S6 SZJLMZOaOL9i6p+l0LnXWXF5o9+xWkieAMHRhiaRz6t7XNv5dWkAFF9IJiTV6JoSd37D o1eN5tOff8PuO9Krqo68rJEqDLIHtemH02vkyZ9nrJe0tJOfvYHAog1XhXwpGtxOo7/M kqVQ== 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=VPBtRF1P8zIcKL/qQOS/nveSh7tSWhI300YCJsU1AuSFcK8SUZtGoCKaMdlSkNBhdL ybdx4orCVvhcwR96X6Yj7ZFa9skkychJ6F4A6iTdaUaHS5HOGdDhf/eSsr4S18imv+wx mr5FPebE1nkfTXhUqWKUjEJpHdmyoetOgTXj6cnWzNRQ1SVt9IEmevaKlsEnLDMuqZJi ZCVAif9P2/sdGrqWURD48IlL1u+OX35mhb0iDnNnc1I2UQK9axdEJyKAnOBcCGH9Ya+o cg1iybcyHFMaoF9gvgAKyE3oVmi9GHTwi7H1nXmZa2JouXEFjcIaNHKX/som7jQ0SCNo Rt7g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=C6yg4MSK; 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 s1si10826556edw.362.2020.06.09.10.58.36; Tue, 09 Jun 2020 10:58:37 -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=C6yg4MSK; 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 S1733222AbgFIRzR (ORCPT + 15 others); Tue, 9 Jun 2020 13:55:17 -0400 Received: from mail.kernel.org ([198.145.29.99]:47434 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1733214AbgFIRzQ (ORCPT ); Tue, 9 Jun 2020 13:55:16 -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 DEC70206D5; Tue, 9 Jun 2020 17:55:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1591725316; bh=tJ7i3gI0/ijEe7QVglU/MZNhpV1Jc+al4aF2FGTCKJs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=C6yg4MSKdkVkVyqg67IAuUJ60fs09iEbb//H8cEWYazXuLDAB1aTqR3uaXAstPMVF lp0stQUBJkMZGypspxBp5H4tQaqXdT4VM5H3lfL8hcWV07sVC1TfY8zNzsMOTGpB9Z D0vPTs1rmFtduFJQiDvrMVQFRsmH+R/CyiFNCg7E= 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.7 08/24] iio:chemical:pms7003: Fix timestamp alignment and prevent data leak. Date: Tue, 9 Jun 2020 19:45:39 +0200 Message-Id: <20200609174149.993708614@linuxfoundation.org> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200609174149.255223112@linuxfoundation.org> References: <20200609174149.255223112@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);