Received: by 2002:a25:23cc:0:0:0:0:0 with SMTP id j195csp218655ybj; Mon, 4 May 2020 19:46:26 -0700 (PDT) X-Google-Smtp-Source: APiQypLV5AQxsTkWjryCR2Sg2Givc9+GL4HBXF6dysc0Qem0WSkSvoTwVDec4otBByfq9hOI+M+F X-Received: by 2002:a17:906:31d7:: with SMTP id f23mr728458ejf.118.1588646786786; Mon, 04 May 2020 19:46:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1588646786; cv=none; d=google.com; s=arc-20160816; b=z8GDjSX3uTZrzcHJ2bFMZHD25Lz46UUMgS8PNhGKYiomiSe74XNfGdmZU++yM/GstC O5Z8z8nPRpn9ip6fNzkAyGaIVTYuJ0yWJ5f6pdXf0abBe6G1cxDwfH0XI1N53DfH0H46 5uWMeKfspHJoTIze7CGOqUCLqKLls/UQhPYdY581R/i5NvM48/bHwdv8zflwXDNVen+p Geqo4Y/7magx5GQkT87yDlbAX5fSRd76T+r5KPtxL53HVqUP3EBoeR1bLYGp5/gd6EgC HdGCgKrR3lMJozJM15j1KcwpQEJLk0q5nAZcLjeL51Bl0+mrSc2VPXOjFzQUUDncTN7d 7FhA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dmarc-filter:dkim-signature; bh=L9nUz4QcIV4087LWk9ngQ8J3kGqbHnK2hICsHkNIRUU=; b=IP6TTTmJhFoCL8FpcoEO03ja5ys/BVWBL5bn1owiYI04J6NyLIQH4xhFTL0zE8rM6k pgjWnxW3FKTEdwDX9IueX/2UgohqKjy9WNKfXKMv4NCuV/bKe2qZ7GRG8XlucKiaU5fX fkPl4GKN2MCSI0No62gOdJGyR40r5/Y0s8lYXzXIprC5DQrNg+B1SJCpFs/jWaZlDh5O hPDYBmOz48hQtPafrdICSNzimMeG7WQkG0slXtM41BkWvApo6a0YkHpfRPU80IHGExDB PyxjJa52NRhVS3wetmRN1uhPyZixrC6k++fV20pyqBUSsKPwevw7OMWxsV3mbAjcw1LT LS4g== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@mg.codeaurora.org header.s=smtp header.b=CfMiaE1Y; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-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 d10si484788edy.293.2020.05.04.19.46.03; Mon, 04 May 2020 19:46:26 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=fail header.i=@mg.codeaurora.org header.s=smtp header.b=CfMiaE1Y; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728326AbgEECoj (ORCPT + 99 others); Mon, 4 May 2020 22:44:39 -0400 Received: from mail26.static.mailgun.info ([104.130.122.26]:61259 "EHLO mail26.static.mailgun.info" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728206AbgEECoh (ORCPT ); Mon, 4 May 2020 22:44:37 -0400 DKIM-Signature: a=rsa-sha256; v=1; c=relaxed/relaxed; d=mg.codeaurora.org; q=dns/txt; s=smtp; t=1588646676; h=References: In-Reply-To: Message-Id: Date: Subject: Cc: To: From: Sender; bh=L9nUz4QcIV4087LWk9ngQ8J3kGqbHnK2hICsHkNIRUU=; b=CfMiaE1YYwSeHlc042RBTv8OKlx23csZMnNf4QG+Y+7romGvMzFDKsL5FD/AuIZqfMZna8Kw V8sOviP/0Ifozqkb9kNIjWt46vz2AT354SbUz26UryEGi/1MngExfmUKOz31dtP3mPchOJ+9 X0ene5e2Eeye+09/WEg7g2bKP3Y= X-Mailgun-Sending-Ip: 104.130.122.26 X-Mailgun-Sid: WyI0MWYwYSIsICJsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnIiwgImJlOWU0YSJd Received: from smtp.codeaurora.org (ec2-35-166-182-171.us-west-2.compute.amazonaws.com [35.166.182.171]) by mxa.mailgun.org with ESMTP id 5eb0d313.7fdbc3075d50-smtp-out-n03; Tue, 05 May 2020 02:44:35 -0000 (UTC) Received: by smtp.codeaurora.org (Postfix, from userid 1001) id A3395C4478F; Tue, 5 May 2020 02:44:35 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-caf-mail-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-1.0 required=2.0 tests=ALL_TRUSTED,SPF_NONE autolearn=ham autolearn_force=no version=3.4.0 Received: from bbhatt-linux.qualcomm.com (i-global254.qualcomm.com [199.106.103.254]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: bbhatt) by smtp.codeaurora.org (Postfix) with ESMTPSA id 12393C4478C; Tue, 5 May 2020 02:44:35 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 12393C4478C Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; spf=none smtp.mailfrom=bbhatt@codeaurora.org From: Bhaumik Bhatt To: mani@kernel.org Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, hemantk@codeaurora.org, jhugo@codeaurora.org, Bhaumik Bhatt Subject: [PATCH v5 4/8] bus: mhi: core: Read transfer length from an event properly Date: Mon, 4 May 2020 19:44:18 -0700 Message-Id: <1588646662-25785-5-git-send-email-bbhatt@codeaurora.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1588646662-25785-1-git-send-email-bbhatt@codeaurora.org> References: <1588646662-25785-1-git-send-email-bbhatt@codeaurora.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Hemant Kumar When MHI Driver receives an EOT event, it reads xfer_len from the event in the last TRE. The value is under control of the MHI device and never validated by Host MHI driver. The value should never be larger than the real size of the buffer but a malicious device can set the value 0xFFFF as maximum. This causes driver to memory overflow (both read or write). Fix this issue by reading minimum of transfer length from event and the buffer length provided. Signed-off-by: Hemant Kumar Signed-off-by: Bhaumik Bhatt Reviewed-by: Jeffrey Hugo --- drivers/bus/mhi/core/main.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/bus/mhi/core/main.c b/drivers/bus/mhi/core/main.c index e60ab21..159732e 100644 --- a/drivers/bus/mhi/core/main.c +++ b/drivers/bus/mhi/core/main.c @@ -514,7 +514,10 @@ static int parse_xfer_event(struct mhi_controller *mhi_cntrl, mhi_cntrl->unmap_single(mhi_cntrl, buf_info); result.buf_addr = buf_info->cb_buf; - result.bytes_xferd = xfer_len; + + /* truncate to buf len if xfer_len is larger */ + result.bytes_xferd = + min_t(u16, xfer_len, buf_info->len); mhi_del_ring_element(mhi_cntrl, buf_ring); mhi_del_ring_element(mhi_cntrl, tre_ring); local_rp = tre_ring->rp; @@ -598,7 +601,9 @@ static int parse_rsc_event(struct mhi_controller *mhi_cntrl, result.transaction_status = (ev_code == MHI_EV_CC_OVERFLOW) ? -EOVERFLOW : 0; - result.bytes_xferd = xfer_len; + + /* truncate to buf len if xfer_len is larger */ + result.bytes_xferd = min_t(u16, xfer_len, buf_info->len); result.buf_addr = buf_info->cb_buf; result.dir = mhi_chan->dir; -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project