Received: by 2002:a25:868d:0:0:0:0:0 with SMTP id z13csp2927921ybk; Mon, 18 May 2020 11:18:53 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx4pmmQ1B00NJi5xmHo2efF56huX0BBkVDwYzY1MWHVfvJfMmnvMH9NsHYzFyTJa71DBTRu X-Received: by 2002:a50:9547:: with SMTP id v7mr15522253eda.78.1589825932953; Mon, 18 May 2020 11:18:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1589825932; cv=none; d=google.com; s=arc-20160816; b=affd0GCvqMrqQUc149yylYr79opUv9tsd4WElTNNtsxFdblMzvuSm32DxjPWt9lMWH OBRHnvZbh5zZbl1d5saPf9hV24MqIfkg47vfcLvXlmiEtjClHmgWBIErpJXEgSWQAerA +xeoMSaao/9f1Gi+8i3ApAflxfYGdev3zyVvEUy/gTZHfLo0iEVSmt7HocD12CPDyLe9 gUpIlPXJCoswh7PGvAgA67X9YAo1VreH01EOBd6EuY4Oxc3L/ePAJ8vtT8LyMpNm2DEy EQCo56/mzfjG9WjgDBGztcaxS9N4wPcd+9MgZnXkMpB+R7IMJa99Nh1DtguRfiHhURrS xHfQ== 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=MysdN5Neb4TJshZWDbg2n7Gw+nD6WqMypDSx1WuPdSc=; b=KQocDHHgHGAD2XJbMlsbsgIdZn1JaQayfKNDHCpmLt2Sl9+LY7ms34dGFL+P1w9TIM 1F+dYbkeSwy6Nb0RIHE71eDuG6Zb09TodldQkbAMBSd1LyL43ixcqWUATIFN1ouOnuvD D9e89KkK1OWPepc3tkTYkv5FKt7GPifLmO/kriaqV28yfWHVEMnsaJvA08CQK5gmzJ4C P4d+kLWLOhsbZtwd6iwLe73GtbpBhF5oOHy/LvCqZPX1+efBdSg8gNxwBxm+ylKdHB3J 22ir0+HM89vYJqaxM9iBH55o/ytGuap2bFjgK7ZaUbr/GUQqVzxsAocYWp744s8cH8HR M53Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="Z/LuYQ/7"; 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 sd5si6304616ejb.194.2020.05.18.11.18.29; Mon, 18 May 2020 11:18:52 -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=pass header.i=@kernel.org header.s=default header.b="Z/LuYQ/7"; 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 S1732984AbgERSOI (ORCPT + 99 others); Mon, 18 May 2020 14:14:08 -0400 Received: from mail.kernel.org ([198.145.29.99]:43434 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732376AbgERSBP (ORCPT ); Mon, 18 May 2020 14:01:15 -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 E200E20829; Mon, 18 May 2020 18:01:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1589824874; bh=6NoDHuyUjbD1VRYy9KYkvyxDEQqnWpl0fO+zIhe750U=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Z/LuYQ/7TfYp6snGnudIvLzAcLsyXs7+Jq/scHOyP0f98yMdifgQ566ku5U5GgSp+ Ys85RWRganQ7DaVoUmszcgHyO/PYeya2tqVQQWc2QIj5bD9v/RX8cXBvY/oMELC+eQ mn12rFVmayGua+aA1h2hsIz/GDCmc2YWjcXFLrEs= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Chuck Lever , Anna Schumaker , Sasha Levin Subject: [PATCH 5.6 004/194] xprtrdma: Fix trace point use-after-free race Date: Mon, 18 May 2020 19:34:54 +0200 Message-Id: <20200518173531.920337563@linuxfoundation.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200518173531.455604187@linuxfoundation.org> References: <20200518173531.455604187@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 [ Upstream commit bdb2ce82818577ba6e57b7d68b698b8d17329281 ] It's not safe to use resources pointed to by the @send_wr of ib_post_send() _after_ that function returns. Those resources are typically freed by the Send completion handler, which can run before ib_post_send() returns. Thus the trace points currently around ib_post_send() in the client's RPC/RDMA transport are a hazard, even when they are disabled. Rearrange them so that they touch the Work Request only _before_ ib_post_send() is invoked. Fixes: ab03eff58eb5 ("xprtrdma: Add trace points in RPC Call transmit paths") Signed-off-by: Chuck Lever Signed-off-by: Anna Schumaker Signed-off-by: Sasha Levin --- include/trace/events/rpcrdma.h | 12 ++++-------- net/sunrpc/xprtrdma/verbs.c | 2 +- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/include/trace/events/rpcrdma.h b/include/trace/events/rpcrdma.h index fa14adf242353..43158151821c4 100644 --- a/include/trace/events/rpcrdma.h +++ b/include/trace/events/rpcrdma.h @@ -721,11 +721,10 @@ TRACE_EVENT(xprtrdma_prepsend_failed, TRACE_EVENT(xprtrdma_post_send, TP_PROTO( - const struct rpcrdma_req *req, - int status + const struct rpcrdma_req *req ), - TP_ARGS(req, status), + TP_ARGS(req), TP_STRUCT__entry( __field(const void *, req) @@ -734,7 +733,6 @@ TRACE_EVENT(xprtrdma_post_send, __field(unsigned int, client_id) __field(int, num_sge) __field(int, signaled) - __field(int, status) ), TP_fast_assign( @@ -747,15 +745,13 @@ TRACE_EVENT(xprtrdma_post_send, __entry->sc = req->rl_sendctx; __entry->num_sge = req->rl_wr.num_sge; __entry->signaled = req->rl_wr.send_flags & IB_SEND_SIGNALED; - __entry->status = status; ), - TP_printk("task:%u@%u req=%p sc=%p (%d SGE%s) %sstatus=%d", + TP_printk("task:%u@%u req=%p sc=%p (%d SGE%s) %s", __entry->task_id, __entry->client_id, __entry->req, __entry->sc, __entry->num_sge, (__entry->num_sge == 1 ? "" : "s"), - (__entry->signaled ? "signaled " : ""), - __entry->status + (__entry->signaled ? "signaled" : "") ) ); diff --git a/net/sunrpc/xprtrdma/verbs.c b/net/sunrpc/xprtrdma/verbs.c index 4b9fbf69b4955..a48b99f3682c3 100644 --- a/net/sunrpc/xprtrdma/verbs.c +++ b/net/sunrpc/xprtrdma/verbs.c @@ -1523,8 +1523,8 @@ int rpcrdma_post_sends(struct rpcrdma_xprt *r_xprt, struct rpcrdma_req *req) --ep->rep_send_count; } + trace_xprtrdma_post_send(req); rc = frwr_send(r_xprt, req); - trace_xprtrdma_post_send(req, rc); if (rc) return -ENOTCONN; return 0; -- 2.20.1