Received: by 2002:a05:6a10:1287:0:0:0:0 with SMTP id d7csp3467069pxv; Mon, 26 Jul 2021 05:00:35 -0700 (PDT) X-Google-Smtp-Source: ABdhPJync+WCHPJ9YvHpd5CK7D7u5MNwhSvTrPN5n3VhPVRF1Eb/dUwFo356EgYX+1T0YUuehWv2 X-Received: by 2002:a17:906:c110:: with SMTP id do16mr16937880ejc.347.1627300835660; Mon, 26 Jul 2021 05:00:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1627300835; cv=none; d=google.com; s=arc-20160816; b=oHxrwYBzpnbSZdqMELQ9GtWNleljqvMDMM3vDYFRQkn9kV+qgHyhgsiQFHp88onSFP ub31AVKKoQ/pyb6bEZ1cu0mEqE7W4KLcUH1Dh089n+mGjjEqtfP2IfpLuHBQI2QD5gqE 6HidFQTOn9g0vAR3khha5uIbwVZI2T7iM9yYmB/+Tg6ueeTBg7Lv4kl6KV6ALI9n7JvV S4bnSK/UP4UYYfXt+5Iq8jDD5HAI+tdTV572gikgmIL6l/iHuTvTEB3IF3M6ej0E4g31 fKVk+HSQipNYt76Uk3D9LjbMoneDmaFGTxUQ9+Yewf+cNquA/PTIkTgdHVpRPnIybqqp WbFA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:to:from:dkim-signature; bh=Xw2cmaPRGSpdwc2hzJ9lbAFPAzzsUnXlF5c4wgjOq7Y=; b=FbN5LFi6PNKv3mC0n5BwNUV60nBwC9Bt/J67UcBwL0ppmHwePYKPzjt9zf6aQb+56Z xyRlWzgbrO+DFuV+oKMfHGOgOrR4BOO7ejoUBzhxR/ssSh9aFMX7k+C7bOKxHNJQphHQ bIavomvIpmEGjnSu/gznfb/icESUQ2qh/2xFEyTL1nejH5B2umm7Jx6/XU5CTx2c8kum TU/Aae2r+StMTd1WgmRW5XsDP/WxfbQOm4ybNaEF+CqnsyH8l8I0zM3WDoID/Fi57byX Mk2PBlKUuDpOavq501KphDa/0mzB5EAVOO5xwaCP4otWASO1O02avg/JOLb3OalGxxRU moag== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b="pWK2f/36"; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id g17si19244423ejr.674.2021.07.26.05.00.12; Mon, 26 Jul 2021 05:00:35 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-nfs-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=k20201202 header.b="pWK2f/36"; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233786AbhGZLS4 (ORCPT + 99 others); Mon, 26 Jul 2021 07:18:56 -0400 Received: from mail.kernel.org ([198.145.29.99]:37520 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233814AbhGZLS4 (ORCPT ); Mon, 26 Jul 2021 07:18:56 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 2197E60F38 for ; Mon, 26 Jul 2021 11:59:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1627300765; bh=YQhIwQlRnWIGwninUTiQkXOp95CVg0WvXvBEtOKSPEY=; h=From:To:Subject:Date:From; b=pWK2f/36NpNH2ojznHx68YGvjqIVw0s+1bu5Iiiz707YbzhooAW6/RkjP6wLOIx37 88zVBhvw5kWBVq+u/WqDFx+nP82Qv5X82MCiT8mhDfTIF4oikY2DdCUCXhpJg8RlFu ydw6lwUwmBqt3Sw4QJHnPMsXFSSnYXVtGnKPUd3LPz+dap7uQLYzMVNjEagzu6EXqo WVFZNfx/iX/IX7oai9xFe7yxOJvMyw8gr8BZg8ZXPKlM0aH2LAVcHc8RKb8O3L7tTY Zu4tNkciHbc+wTvnbPZ1ixvLReraHEnUnRF8jgYrDhYAqTEAC8gULG7I/fUcLEjYow lhOchiftSlNog== From: trondmy@kernel.org To: linux-nfs@vger.kernel.org Subject: [PATCH 1/2] SUNRPC: Fix potential memory corruption Date: Mon, 26 Jul 2021 07:59:23 -0400 Message-Id: <20210726115924.8576-1-trondmy@kernel.org> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org From: Trond Myklebust We really should not call rpc_wake_up_queued_task_set_status() with xprt->snd_task as an argument unless we are certain that is actually an rpc_task. Fixes: 0445f92c5d53 ("SUNRPC: Fix disconnection races") Signed-off-by: Trond Myklebust --- include/linux/sunrpc/xprt.h | 1 + net/sunrpc/xprt.c | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/include/linux/sunrpc/xprt.h b/include/linux/sunrpc/xprt.h index c8c39f22d3b1..59cd97da895b 100644 --- a/include/linux/sunrpc/xprt.h +++ b/include/linux/sunrpc/xprt.h @@ -432,6 +432,7 @@ void xprt_release_write(struct rpc_xprt *, struct rpc_task *); #define XPRT_CONGESTED (9) #define XPRT_CWND_WAIT (10) #define XPRT_WRITE_SPACE (11) +#define XPRT_SND_IS_COOKIE (12) static inline void xprt_set_connected(struct rpc_xprt *xprt) { diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c index fb6db09725c7..bddd354a0076 100644 --- a/net/sunrpc/xprt.c +++ b/net/sunrpc/xprt.c @@ -775,9 +775,9 @@ void xprt_force_disconnect(struct rpc_xprt *xprt) /* Try to schedule an autoclose RPC call */ if (test_and_set_bit(XPRT_LOCKED, &xprt->state) == 0) queue_work(xprtiod_workqueue, &xprt->task_cleanup); - else if (xprt->snd_task) + else if (xprt->snd_task && !test_bit(XPRT_SND_IS_COOKIE, &xprt->state)) rpc_wake_up_queued_task_set_status(&xprt->pending, - xprt->snd_task, -ENOTCONN); + xprt->snd_task, -ENOTCONN); spin_unlock(&xprt->transport_lock); } EXPORT_SYMBOL_GPL(xprt_force_disconnect); @@ -866,6 +866,7 @@ bool xprt_lock_connect(struct rpc_xprt *xprt, goto out; if (xprt->snd_task != task) goto out; + set_bit(XPRT_SND_IS_COOKIE, &xprt->state); xprt->snd_task = cookie; ret = true; out: @@ -881,6 +882,7 @@ void xprt_unlock_connect(struct rpc_xprt *xprt, void *cookie) if (!test_bit(XPRT_LOCKED, &xprt->state)) goto out; xprt->snd_task =NULL; + clear_bit(XPRT_SND_IS_COOKIE, &xprt->state); xprt->ops->release_xprt(xprt, NULL); xprt_schedule_autodisconnect(xprt); out: -- 2.31.1