linux-nfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/3] Refix the socket leak in xs_setup_local()
@ 2022-05-11 13:22 Wang Hai
  2022-05-11 13:22 ` [PATCH 1/3] Revert "SUNRPC: Ensure gss-proxy connects on setup" Wang Hai
                   ` (3 more replies)
  0 siblings, 4 replies; 6+ messages in thread
From: Wang Hai @ 2022-05-11 13:22 UTC (permalink / raw)
  To: trond.myklebust, bfields, anna, chuck.lever, davem, kuba, pabeni
  Cc: linux-nfs, netdev, linux-kernel, wanghai38

Patch1 and patch2 roll back the wrong solution to fix socket leaks.

Patch3 adds safe teardown mechanism to re-fix socket leaks.

Wang Hai (3):
  Revert "SUNRPC: Ensure gss-proxy connects on setup"
  Revert "Revert "SUNRPC: attempt AF_LOCAL connect on setup""
  SUNRPC: Fix local socket leak in xs_setup_local()

 include/linux/sunrpc/clnt.h          |  1 -
 net/sunrpc/auth_gss/gss_rpc_upcall.c |  2 +-
 net/sunrpc/clnt.c                    |  3 ---
 net/sunrpc/xprtsock.c                | 19 ++++++++++++++++++-
 4 files changed, 19 insertions(+), 6 deletions(-)

-- 
2.17.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 1/3] Revert "SUNRPC: Ensure gss-proxy connects on setup"
  2022-05-11 13:22 [PATCH 0/3] Refix the socket leak in xs_setup_local() Wang Hai
@ 2022-05-11 13:22 ` Wang Hai
  2022-05-11 13:22 ` [PATCH 2/3] Revert "Revert "SUNRPC: attempt AF_LOCAL connect on setup"" Wang Hai
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 6+ messages in thread
From: Wang Hai @ 2022-05-11 13:22 UTC (permalink / raw)
  To: trond.myklebust, bfields, anna, chuck.lever, davem, kuba, pabeni
  Cc: linux-nfs, netdev, linux-kernel, wanghai38

This reverts commit 892de36fd4a98fab3298d417c051d9099af5448d.

In fact, gss-proxy can't respond to rpc_ping() at setup time.
After the timeout, rpc_ping() will return -EIO instead of -EOPNOTSUPP.
The reverted patch can't ensure that gssp connects to the service
at setup time.

Signed-off-by: Wang Hai <wanghai38@huawei.com>
---
 include/linux/sunrpc/clnt.h          | 1 -
 net/sunrpc/auth_gss/gss_rpc_upcall.c | 2 +-
 net/sunrpc/clnt.c                    | 3 ---
 3 files changed, 1 insertion(+), 5 deletions(-)

diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h
index db5149567305..267b7aeaf1a6 100644
--- a/include/linux/sunrpc/clnt.h
+++ b/include/linux/sunrpc/clnt.h
@@ -160,7 +160,6 @@ 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 8ca1d809b78d..61c276bddaf2 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_IGNORE_NULL_UNAVAIL |
+		.flags		= RPC_CLNT_CREATE_NOPING |
 				  RPC_CLNT_CREATE_NO_IDLE_TIMEOUT
 	};
 	struct rpc_clnt *clnt;
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
index 22c28cf43eba..98133aa54f19 100644
--- a/net/sunrpc/clnt.c
+++ b/net/sunrpc/clnt.c
@@ -479,9 +479,6 @@ 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);
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 2/3] Revert "Revert "SUNRPC: attempt AF_LOCAL connect on setup""
  2022-05-11 13:22 [PATCH 0/3] Refix the socket leak in xs_setup_local() Wang Hai
  2022-05-11 13:22 ` [PATCH 1/3] Revert "SUNRPC: Ensure gss-proxy connects on setup" Wang Hai
@ 2022-05-11 13:22 ` Wang Hai
  2022-05-11 13:22 ` [PATCH 3/3] SUNRPC: Fix local socket leak in xs_setup_local() Wang Hai
  2022-05-11 16:14 ` [PATCH 0/3] Refix the " Trond Myklebust
  3 siblings, 0 replies; 6+ messages in thread
From: Wang Hai @ 2022-05-11 13:22 UTC (permalink / raw)
  To: trond.myklebust, bfields, anna, chuck.lever, davem, kuba, pabeni
  Cc: linux-nfs, netdev, linux-kernel, wanghai38

This reverts commit a3d0562d4dc039bca39445e1cddde7951662e17d.

There is currently no better way to ensure that gss-proxy connects when
setup. Therefore, it is still necessary to connect in the construction.
The mechanism to safely tear xprt down needs to be implemented later.

Signed-off-by: Wang Hai <wanghai38@huawei.com>
---
 net/sunrpc/xprtsock.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
index 650102a9c86a..25b8a8ead56b 100644
--- a/net/sunrpc/xprtsock.c
+++ b/net/sunrpc/xprtsock.c
@@ -2875,6 +2875,9 @@ 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);
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 3/3] SUNRPC: Fix local socket leak in xs_setup_local()
  2022-05-11 13:22 [PATCH 0/3] Refix the socket leak in xs_setup_local() Wang Hai
  2022-05-11 13:22 ` [PATCH 1/3] Revert "SUNRPC: Ensure gss-proxy connects on setup" Wang Hai
  2022-05-11 13:22 ` [PATCH 2/3] Revert "Revert "SUNRPC: attempt AF_LOCAL connect on setup"" Wang Hai
@ 2022-05-11 13:22 ` Wang Hai
  2022-05-11 16:14 ` [PATCH 0/3] Refix the " Trond Myklebust
  3 siblings, 0 replies; 6+ messages in thread
From: Wang Hai @ 2022-05-11 13:22 UTC (permalink / raw)
  To: trond.myklebust, bfields, anna, chuck.lever, davem, kuba, pabeni
  Cc: linux-nfs, netdev, linux-kernel, wanghai38

Add mechanism in xs_setup_local() to safely tear xprt down and
solve the socket leak problem.

Signed-off-by: Wang Hai <wanghai38@huawei.com>
---
 net/sunrpc/xprtsock.c | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
index 25b8a8ead56b..7b9a62750571 100644
--- a/net/sunrpc/xprtsock.c
+++ b/net/sunrpc/xprtsock.c
@@ -1264,6 +1264,18 @@ static void xs_xprt_free(struct rpc_xprt *xprt)
 	xprt_free(xprt);
 }
 
+/**
+ * xs_destroy_xprt - close xprt socket and destroy it.
+ */
+static void xs_destroy_xprt(struct work_struct *work)
+{
+	struct rpc_xprt *xprt =
+		container_of(work, struct rpc_xprt, task_cleanup);
+
+	xs_close(xprt);
+	xs_xprt_free(xprt);
+}
+
 /**
  * xs_destroy - prepare to shutdown a transport
  * @xprt: doomed transport
@@ -2891,7 +2903,9 @@ static struct rpc_xprt *xs_setup_local(struct xprt_create *args)
 		return xprt;
 	ret = ERR_PTR(-EINVAL);
 out_err:
-	xs_xprt_free(xprt);
+
+	INIT_WORK(&xprt->task_cleanup, xs_destroy_xprt);
+	schedule_work(&xprt->task_cleanup);
 	return ret;
 }
 
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH 0/3] Refix the socket leak in xs_setup_local()
  2022-05-11 13:22 [PATCH 0/3] Refix the socket leak in xs_setup_local() Wang Hai
                   ` (2 preceding siblings ...)
  2022-05-11 13:22 ` [PATCH 3/3] SUNRPC: Fix local socket leak in xs_setup_local() Wang Hai
@ 2022-05-11 16:14 ` Trond Myklebust
  2022-05-12  1:58   ` wanghai (M)
  3 siblings, 1 reply; 6+ messages in thread
From: Trond Myklebust @ 2022-05-11 16:14 UTC (permalink / raw)
  To: bfields, anna, pabeni, davem, wanghai38, chuck.lever, kuba
  Cc: linux-nfs, netdev, linux-kernel

On Wed, 2022-05-11 at 21:22 +0800, Wang Hai wrote:
> Patch1 and patch2 roll back the wrong solution to fix socket leaks.
> 
> Patch3 adds safe teardown mechanism to re-fix socket leaks.
> 
> Wang Hai (3):
>   Revert "SUNRPC: Ensure gss-proxy connects on setup"
>   Revert "Revert "SUNRPC: attempt AF_LOCAL connect on setup""
>   SUNRPC: Fix local socket leak in xs_setup_local()
> 
>  include/linux/sunrpc/clnt.h          |  1 -
>  net/sunrpc/auth_gss/gss_rpc_upcall.c |  2 +-
>  net/sunrpc/clnt.c                    |  3 ---
>  net/sunrpc/xprtsock.c                | 19 ++++++++++++++++++-
>  4 files changed, 19 insertions(+), 6 deletions(-)
> 

Thanks, but there is already a fix for this queued up in the linux-next
branch.

-- 
Trond Myklebust
Linux NFS client maintainer, Hammerspace
trond.myklebust@hammerspace.com



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 0/3] Refix the socket leak in xs_setup_local()
  2022-05-11 16:14 ` [PATCH 0/3] Refix the " Trond Myklebust
@ 2022-05-12  1:58   ` wanghai (M)
  0 siblings, 0 replies; 6+ messages in thread
From: wanghai (M) @ 2022-05-12  1:58 UTC (permalink / raw)
  To: Trond Myklebust, bfields, anna, pabeni, davem, chuck.lever, kuba
  Cc: linux-nfs, netdev, linux-kernel


在 2022/5/12 0:14, Trond Myklebust 写道:
> On Wed, 2022-05-11 at 21:22 +0800, Wang Hai wrote:
>> Patch1 and patch2 roll back the wrong solution to fix socket leaks.
>>
>> Patch3 adds safe teardown mechanism to re-fix socket leaks.
>>
>> Wang Hai (3):
>>    Revert "SUNRPC: Ensure gss-proxy connects on setup"
>>    Revert "Revert "SUNRPC: attempt AF_LOCAL connect on setup""
>>    SUNRPC: Fix local socket leak in xs_setup_local()
>>
>>   include/linux/sunrpc/clnt.h          |  1 -
>>   net/sunrpc/auth_gss/gss_rpc_upcall.c |  2 +-
>>   net/sunrpc/clnt.c                    |  3 ---
>>   net/sunrpc/xprtsock.c                | 19 ++++++++++++++++++-
>>   4 files changed, 19 insertions(+), 6 deletions(-)
>>
> Thanks, but there is already a fix for this queued up in the linux-next
> branch.
Thanks, sorry to bother you, I found it.

I only subscribed to the linux-kernel@vger.kernel.org mailing list,
not the linux-nfs@vger.kernel.org mailing list separately. So I
didn't notice it was fixed.

-- 
Wang Hai


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2022-05-12  1:58 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-11 13:22 [PATCH 0/3] Refix the socket leak in xs_setup_local() Wang Hai
2022-05-11 13:22 ` [PATCH 1/3] Revert "SUNRPC: Ensure gss-proxy connects on setup" Wang Hai
2022-05-11 13:22 ` [PATCH 2/3] Revert "Revert "SUNRPC: attempt AF_LOCAL connect on setup"" Wang Hai
2022-05-11 13:22 ` [PATCH 3/3] SUNRPC: Fix local socket leak in xs_setup_local() Wang Hai
2022-05-11 16:14 ` [PATCH 0/3] Refix the " Trond Myklebust
2022-05-12  1:58   ` wanghai (M)

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).