From patchwork Fri Apr 29 17:36:26 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 12832571 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E4367C433EF for ; Fri, 29 Apr 2022 17:42:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1351647AbiD2RqD (ORCPT ); Fri, 29 Apr 2022 13:46:03 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52442 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379774AbiD2Rp6 (ORCPT ); Fri, 29 Apr 2022 13:45:58 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0D6E9CFE70 for ; Fri, 29 Apr 2022 10:42:37 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 9C6F16241E for ; Fri, 29 Apr 2022 17:42:36 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 87CE5C385B2; Fri, 29 Apr 2022 17:42:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1651254156; bh=2ZzLX/nSMo3VhPl7kFlY98cwt8OokcpFyhsV9jwdx+U=; h=From:To:Cc:Subject:Date:From; b=eNc5a+1k36A/4Ip8W6MGCNa+OLAfC5wDam75QNcSwnw7kCINjMQh3FVwEGx/+dXyP nqNx7Wli1GdmBsboKLfqoDr8NZ+V3o+Y89aRO+SLdV2LejRs5RRF7oscM0aZ5V5lXD TNnUfSKRApEQcEUZSqB08kNHYhBzee8E2xb34P1N/beHAirrUCwKNN2xgLz97tHXEb xSbzy5yqR+bTQlgwAdJxG/DGvW4+E2I1qFcoxZTQjabRt3V6Q2k+F4kWGObcZym1BB bvos4OYLMu9Uptlx8Hr9SXn74WTyxp9laiCULs+F30v88fwUnQ6wBPa6Bkl2BCsazL +OPcl2RbOVq2w== From: trondmy@kernel.org To: "wanghai (M)" Cc: "J. Bruce Fields" , Chuck Lever , linux-nfs@vger.kernel.org Subject: [PATCH v2 1/4] SUNRPC: Don't leak sockets in xs_local_connect() Date: Fri, 29 Apr 2022 13:36:26 -0400 Message-Id: <20220429173629.621418-1-trondmy@kernel.org> X-Mailer: git-send-email 2.35.1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org From: Trond Myklebust If there is still a closed socket associated with the transport, then we need to trigger an autoclose before we can set up a new connection. Reported-by: wanghai (M) Fixes: f00432063db1 ("SUNRPC: Ensure we flush any closed sockets before xs_xprt_free()") Signed-off-by: Trond Myklebust --- net/sunrpc/xprtsock.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c index 8ab64ea46870..f9849b297ea3 100644 --- a/net/sunrpc/xprtsock.c +++ b/net/sunrpc/xprtsock.c @@ -1950,6 +1950,9 @@ static void xs_local_connect(struct rpc_xprt *xprt, struct rpc_task *task) struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); int ret; + if (transport->file) + goto force_disconnect; + if (RPC_IS_ASYNC(task)) { /* * We want the AF_LOCAL connect to be resolved in the @@ -1962,11 +1965,17 @@ static void xs_local_connect(struct rpc_xprt *xprt, struct rpc_task *task) */ task->tk_rpc_status = -ENOTCONN; rpc_exit(task, -ENOTCONN); - return; + goto out_wake; } ret = xs_local_setup_socket(transport); if (ret && !RPC_IS_SOFTCONN(task)) msleep_interruptible(15000); + return; +force_disconnect: + xprt_force_disconnect(xprt); +out_wake: + xprt_clear_connecting(xprt); + xprt_wake_pending_tasks(xprt, -ENOTCONN); } #if IS_ENABLED(CONFIG_SUNRPC_SWAP) From patchwork Fri Apr 29 17:36:27 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 12832572 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D537CC4332F for ; Fri, 29 Apr 2022 17:42:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379753AbiD2RqD (ORCPT ); Fri, 29 Apr 2022 13:46:03 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52440 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1351647AbiD2Rp6 (ORCPT ); Fri, 29 Apr 2022 13:45:58 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 488EBD39B4 for ; Fri, 29 Apr 2022 10:42:39 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id E5B8BB8376A for ; Fri, 29 Apr 2022 17:42:37 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4585BC385AF; Fri, 29 Apr 2022 17:42:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1651254156; bh=dyTDr9QFVRB6I7vXOXvD7YfHhn+ihB2g1HE55P0kzcU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=EpDXd8TngG9LDBOQWEWyHpxyKZtUsoIaJLJsm9u25+HW3p7DSQr5rmmzUkLzciU+f kiYuwdFUSlSlw1g283u5odIeQCb4OHQC4lRZuSaq/SuteySqXEYOhiOp12cUW6G6PP Lb1/PDhceLa3SJ7KvwbmnW5j3EOdyLhb3+iEvJe18l70I+pnNAlh6whGh2x2i48rbX Kqgo8DlxeUucqRKeqyg5HfUPODU2FnkI04+2QuEQ6QsN+kRBIwz3uFkG/7ZfLfJBn7 Acq0FsM5tsT+SglKdkHCiSva+8szZgrSbvrvbKMS1GeGrgNSEZjLYorLJvk2q9j6w0 UwYsvdZS6FVVQ== From: trondmy@kernel.org To: "wanghai (M)" Cc: "J. Bruce Fields" , Chuck Lever , linux-nfs@vger.kernel.org Subject: [PATCH v2 2/4] SUNRPC: Ensure timely close of disconnected AF_LOCAL sockets Date: Fri, 29 Apr 2022 13:36:27 -0400 Message-Id: <20220429173629.621418-2-trondmy@kernel.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220429173629.621418-1-trondmy@kernel.org> References: <20220429173629.621418-1-trondmy@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org From: Trond Myklebust When the rpcbind server closes the socket, we need to ensure that the socket is closed by the kernel as soon as feasible, so add a sk_state_change callback to trigger this close. Signed-off-by: Trond Myklebust --- net/sunrpc/xprtsock.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c index f9849b297ea3..25b8a8ead56b 100644 --- a/net/sunrpc/xprtsock.c +++ b/net/sunrpc/xprtsock.c @@ -1418,6 +1418,26 @@ static size_t xs_tcp_bc_maxpayload(struct rpc_xprt *xprt) } #endif /* CONFIG_SUNRPC_BACKCHANNEL */ +/** + * xs_local_state_change - callback to handle AF_LOCAL socket state changes + * @sk: socket whose state has changed + * + */ +static void xs_local_state_change(struct sock *sk) +{ + struct rpc_xprt *xprt; + struct sock_xprt *transport; + + if (!(xprt = xprt_from_sock(sk))) + return; + transport = container_of(xprt, struct sock_xprt, xprt); + if (sk->sk_shutdown & SHUTDOWN_MASK) { + clear_bit(XPRT_CONNECTED, &xprt->state); + /* Trigger the socket release */ + xs_run_error_worker(transport, XPRT_SOCK_WAKE_DISCONNECT); + } +} + /** * xs_tcp_state_change - callback to handle TCP socket state changes * @sk: socket whose state has changed @@ -1866,6 +1886,7 @@ static int xs_local_finish_connecting(struct rpc_xprt *xprt, sk->sk_user_data = xprt; sk->sk_data_ready = xs_data_ready; sk->sk_write_space = xs_udp_write_space; + sk->sk_state_change = xs_local_state_change; sk->sk_error_report = xs_error_report; xprt_clear_connected(xprt); From patchwork Fri Apr 29 17:36:28 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 12832569 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 99571C433F5 for ; Fri, 29 Apr 2022 17:42:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379320AbiD2RqC (ORCPT ); Fri, 29 Apr 2022 13:46:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52450 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379775AbiD2Rp7 (ORCPT ); Fri, 29 Apr 2022 13:45:59 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 01E94D3D99 for ; Fri, 29 Apr 2022 10:42:40 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id B1EABB8376B for ; Fri, 29 Apr 2022 17:42:38 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id E669AC385A4; Fri, 29 Apr 2022 17:42:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1651254157; bh=5YPb4LWePLYlCNdOWjz2GW/FS+Um7vpp2gAcdBl86lY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=iK1TFaiq8T3gL7GGIgpkxnJtD1tOQZa3HxxdGVEevbFyTa3PtsBk8Ry2qzjuAEXws De+eaViIBw29dvB+WKCajQxuENCfsWYIbk7SYyYjSu5bMvpoT3yGEZVgNzPPO6RDwu pXqWBQo8as25yZky2cAxI08p4pf18xpB+/A7GTNkEo8ea9E6pNwsxC7UtRYGyPm3iX r4ftZ1afBBX5cVC2XAHzqq0krK6Os5cEdgoiuUXjZ6e2g2QPq5Q9bEWI04q6ikfPVY 5TdLvrJfrz99N1e0SSORw2m5SjYoOdAlc8wjfZVSCTOCiBxI/YwJ6EQZl69fdUtX2M Cea/+7wsmrgxg== From: trondmy@kernel.org To: "wanghai (M)" Cc: "J. Bruce Fields" , Chuck Lever , linux-nfs@vger.kernel.org Subject: [PATCH v2 3/4] SUNRPC: Ensure gss-proxy connects on setup Date: Fri, 29 Apr 2022 13:36:28 -0400 Message-Id: <20220429173629.621418-3-trondmy@kernel.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220429173629.621418-2-trondmy@kernel.org> References: <20220429173629.621418-1-trondmy@kernel.org> <20220429173629.621418-2-trondmy@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org From: Trond Myklebust For reasons best known to the author, gss-proxy does not implement a NULL procedure, and returns RPC_PROC_UNAVAIL. However we still want to ensure that we connect to the service at setup time. So add a quirk-flag specially for this case. Fixes: 1d658336b05f ("SUNRPC: Add RPC based upcall mechanism for RPCGSS auth") Cc: stable@vger.kernel.org Signed-off-by: Trond Myklebust --- include/linux/sunrpc/clnt.h | 1 + net/sunrpc/auth_gss/gss_rpc_upcall.c | 2 +- net/sunrpc/clnt.c | 3 +++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h index 267b7aeaf1a6..db5149567305 100644 --- a/include/linux/sunrpc/clnt.h +++ b/include/linux/sunrpc/clnt.h @@ -160,6 +160,7 @@ struct rpc_add_xprt_test { #define RPC_CLNT_CREATE_NO_RETRANS_TIMEOUT (1UL << 9) #define RPC_CLNT_CREATE_SOFTERR (1UL << 10) #define RPC_CLNT_CREATE_REUSEPORT (1UL << 11) +#define RPC_CLNT_CREATE_IGNORE_NULL_UNAVAIL (1UL << 12) struct rpc_clnt *rpc_create(struct rpc_create_args *args); struct rpc_clnt *rpc_bind_new_program(struct rpc_clnt *, diff --git a/net/sunrpc/auth_gss/gss_rpc_upcall.c b/net/sunrpc/auth_gss/gss_rpc_upcall.c index 61c276bddaf2..8ca1d809b78d 100644 --- a/net/sunrpc/auth_gss/gss_rpc_upcall.c +++ b/net/sunrpc/auth_gss/gss_rpc_upcall.c @@ -97,7 +97,7 @@ static int gssp_rpc_create(struct net *net, struct rpc_clnt **_clnt) * timeout, which would result in reconnections being * done without the correct namespace: */ - .flags = RPC_CLNT_CREATE_NOPING | + .flags = RPC_CLNT_CREATE_IGNORE_NULL_UNAVAIL | RPC_CLNT_CREATE_NO_IDLE_TIMEOUT }; struct rpc_clnt *clnt; diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c index 98133aa54f19..22c28cf43eba 100644 --- a/net/sunrpc/clnt.c +++ b/net/sunrpc/clnt.c @@ -479,6 +479,9 @@ static struct rpc_clnt *rpc_create_xprt(struct rpc_create_args *args, if (!(args->flags & RPC_CLNT_CREATE_NOPING)) { int err = rpc_ping(clnt); + if ((args->flags & RPC_CLNT_CREATE_IGNORE_NULL_UNAVAIL) && + err == -EOPNOTSUPP) + err = 0; if (err != 0) { rpc_shutdown_client(clnt); return ERR_PTR(err); From patchwork Fri Apr 29 17:36:29 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 12832570 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B559FC433FE for ; Fri, 29 Apr 2022 17:42:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379769AbiD2RqC (ORCPT ); Fri, 29 Apr 2022 13:46:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52478 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379762AbiD2RqA (ORCPT ); Fri, 29 Apr 2022 13:46:00 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CC1B9D3710 for ; Fri, 29 Apr 2022 10:42:40 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 84499B8376D for ; Fri, 29 Apr 2022 17:42:39 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id A97E2C385A7; Fri, 29 Apr 2022 17:42:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1651254158; bh=MBQFP4NqrMN0hqGMiSd3JimixdJBn9XsfqOd1NGTQKA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=rYfmZsoBkwP750VV0FNDPKWzSHgHgwIr28LPrl5fQW20P8XBlO4ySUx72YW/KHrm8 Hke44B3gthDeRKA7v7LzPhdBWv+NqKtfUqiD6Hbip36vQv0IYerJZMzurgc9yM8/qT ZIZFP+bOzA33RP3B7b9eiL9qH2wWl1VgT1Kskev0jAwhkv3PVSgO6FJQ9MptabGXrU qjmBlaCopY3xu/fSkkIy+8uDQYzYdYEfgzA0Zpy/z2eEkoFXhGDhJ1ON4wWdPoEn1S t+pHeQ0yBJJWumssZVmsC+fa9MXSkawrDXWNeo1YRoAp3Ehmm0wXrrCXMsjhrL9Oeb PeTJTqBYNtkEg== From: trondmy@kernel.org To: "wanghai (M)" Cc: "J. Bruce Fields" , Chuck Lever , linux-nfs@vger.kernel.org Subject: [PATCH v2 4/4] Revert "SUNRPC: attempt AF_LOCAL connect on setup" Date: Fri, 29 Apr 2022 13:36:29 -0400 Message-Id: <20220429173629.621418-4-trondmy@kernel.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220429173629.621418-3-trondmy@kernel.org> References: <20220429173629.621418-1-trondmy@kernel.org> <20220429173629.621418-2-trondmy@kernel.org> <20220429173629.621418-3-trondmy@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org From: Trond Myklebust This reverts commit 7073ea8799a8cf73db60270986f14e4aae20fa80. We must not try to connect the socket while the transport is under construction, because the mechanisms to safely tear it down are not in place. Cc: stable@vger.kernel.org Signed-off-by: Trond Myklebust --- net/sunrpc/xprtsock.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c index 25b8a8ead56b..650102a9c86a 100644 --- a/net/sunrpc/xprtsock.c +++ b/net/sunrpc/xprtsock.c @@ -2875,9 +2875,6 @@ static struct rpc_xprt *xs_setup_local(struct xprt_create *args) } xprt_set_bound(xprt); xs_format_peer_addresses(xprt, "local", RPCBIND_NETID_LOCAL); - ret = ERR_PTR(xs_local_setup_socket(transport)); - if (ret) - goto out_err; break; default: ret = ERR_PTR(-EAFNOSUPPORT);