Received: by 2002:a25:1506:0:0:0:0:0 with SMTP id 6csp6213014ybv; Tue, 18 Feb 2020 12:08:24 -0800 (PST) X-Google-Smtp-Source: APXvYqzL+zQWM4m0M2XPZZCTofUPeXZZGSkjNjdBH5KVX1NxnuB+ACH1zBCQOnnYGi2XqjZmWu9h X-Received: by 2002:aca:4e10:: with SMTP id c16mr2291313oib.6.1582056504383; Tue, 18 Feb 2020 12:08:24 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1582056504; cv=none; d=google.com; s=arc-20160816; b=tO6O3i+5jKTsyenHFqe/AEO2T03MIY+z1f6kNhsUgrUCIJsS6X9b13eEEaFFEy1u8d V2kkgqW1pK88DTORbCasSxN6/l31dhWDyyJIFsOIf1DenLiTp/p+mNiSfz/gmZrK3jTx iOVQ/PMJE/G5nkourMKtojDRQ9eTMRdxgnkIWN3zNTHtWyv9l/zWj2QZzqfMtOlcfC+R oaxz/OGeN4tffc7kv8bVKAGzYNhlX7B+96CnLCbs/d3RC6KVnffgLTc1L9eCsiZFGMB+ YPxIz5fM4BnhUNBK5Ay/6p797L+cjZWVZ0IXEwxuHHFtpELjiSKwbRZT7eA6I3LWG+JM zyrw== 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=tfZFzjlxzl8rh24EO6tbWt7DuZslBkp+kXbSRMHYA0Q=; b=zRsa+rvrCvsgoGJ1axcikn0kiiazg8kwcs2oXcbUINMhS2qQ5XipzxS0po8EicaLZ5 QrHJIcroXbcr5Anc4w+sm3iBE5VpJK6V4Y0YBZLg9LwZ9ft+rQY2OZBWXAXSCI8W/ThU H77oIcbx0mhp/r08NrNEuee795DasHET//rbgyS5oj526/mI7MslPqR7AAbv7nySvGIs SAaEltSdMmBNcwuww1rxJlgTpM4tuPW4Ohw2MKkxgf4TiePxd2hh4GRBVNY4VX8S+SA7 jxM9psVWBH6MANqZzJ6aZaNf2lL883p50jqEzEqd/LP3o5oGT+1JCmJfn86wppb+Sawh snMw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=VUVqdbHM; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f14si2024563oto.46.2020.02.18.12.08.12; Tue, 18 Feb 2020 12:08:24 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=VUVqdbHM; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728191AbgBRT62 (ORCPT + 99 others); Tue, 18 Feb 2020 14:58:28 -0500 Received: from mail.kernel.org ([198.145.29.99]:36074 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728179AbgBRT6Y (ORCPT ); Tue, 18 Feb 2020 14:58:24 -0500 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 0F7C024125; Tue, 18 Feb 2020 19:58:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1582055904; bh=E/CjsNhoRB3Jo/2R9C3EkvwCVeD17nzH6g1tRVZtoyY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=VUVqdbHM/1fc9XeLnf0eySF/CKT/t6nSLZFK2i4ATIZW+Lt+HX7j37oE2ubGvq1bF XQE2vYoXMTWofKTMD9uPfgIABHow4pyLINHHQBdzp8Syut05F26/NfNq21Dmy0o6WW bKgtgyxV5c6PTuvaW6B9M0i2rPQZTPnzFW8WLnuw= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Andre Tomt , Robin Murphy , Chuck Lever , Jason Gunthorpe , Anna Schumaker Subject: [PATCH 5.4 26/66] xprtrdma: Fix DMA scatter-gather list mapping imbalance Date: Tue, 18 Feb 2020 20:54:53 +0100 Message-Id: <20200218190430.488655256@linuxfoundation.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200218190428.035153861@linuxfoundation.org> References: <20200218190428.035153861@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Chuck Lever commit ca1c671302825182629d3c1a60363cee6f5455bb upstream. The @nents value that was passed to ib_dma_map_sg() has to be passed to the matching ib_dma_unmap_sg() call. If ib_dma_map_sg() choses to concatenate sg entries, it will return a different nents value than it was passed. The bug was exposed by recent changes to the AMD IOMMU driver, which enabled sg entry concatenation. Looking all the way back to commit 4143f34e01e9 ("xprtrdma: Port to new memory registration API") and reviewing other kernel ULPs, it's not clear that the frwr_map() logic was ever correct for this case. Reported-by: Andre Tomt Suggested-by: Robin Murphy Signed-off-by: Chuck Lever Cc: stable@vger.kernel.org Reviewed-by: Jason Gunthorpe Signed-off-by: Anna Schumaker Signed-off-by: Greg Kroah-Hartman --- net/sunrpc/xprtrdma/frwr_ops.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) --- a/net/sunrpc/xprtrdma/frwr_ops.c +++ b/net/sunrpc/xprtrdma/frwr_ops.c @@ -326,8 +326,8 @@ struct rpcrdma_mr_seg *frwr_map(struct r { struct rpcrdma_ia *ia = &r_xprt->rx_ia; struct ib_reg_wr *reg_wr; + int i, n, dma_nents; struct ib_mr *ibmr; - int i, n; u8 key; if (nsegs > ia->ri_max_frwr_depth) @@ -351,15 +351,16 @@ struct rpcrdma_mr_seg *frwr_map(struct r break; } mr->mr_dir = rpcrdma_data_dir(writing); + mr->mr_nents = i; - mr->mr_nents = - ib_dma_map_sg(ia->ri_id->device, mr->mr_sg, i, mr->mr_dir); - if (!mr->mr_nents) + dma_nents = ib_dma_map_sg(ia->ri_id->device, mr->mr_sg, mr->mr_nents, + mr->mr_dir); + if (!dma_nents) goto out_dmamap_err; ibmr = mr->frwr.fr_mr; - n = ib_map_mr_sg(ibmr, mr->mr_sg, mr->mr_nents, NULL, PAGE_SIZE); - if (unlikely(n != mr->mr_nents)) + n = ib_map_mr_sg(ibmr, mr->mr_sg, dma_nents, NULL, PAGE_SIZE); + if (n != dma_nents) goto out_mapmr_err; ibmr->iova &= 0x00000000ffffffff;