]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
SUNRPC: Handle -ETIMEDOUT return from tlshd
authorBenjamin Coddington <bcodding@redhat.com>
Tue, 11 Feb 2025 17:31:57 +0000 (12:31 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 7 Mar 2025 17:25:27 +0000 (18:25 +0100)
[ Upstream commit 7a2f6f7687c5f7083a35317cddec5ad9fa491443 ]

If the TLS handshake attempt returns -ETIMEDOUT, we currently translate
that error into -EACCES.  This becomes problematic for cases where the RPC
layer is attempting to re-connect in paths that don't resonably handle
-EACCES, for example: writeback.  The RPC layer can handle -ETIMEDOUT quite
well, however - so if the handshake returns this error let's just pass it
along.

Fixes: 75eb6af7acdf ("SUNRPC: Add a TCP-with-TLS RPC transport class")
Signed-off-by: Benjamin Coddington <bcodding@redhat.com>
Signed-off-by: Anna Schumaker <anna.schumaker@oracle.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
net/sunrpc/xprtsock.c

index b69e6290acfabe343cdc08595e6c8f2c0f5732d7..171ad4e2523f1382a62d4f67f09793bcea13c491 100644 (file)
@@ -2580,7 +2580,15 @@ static void xs_tls_handshake_done(void *data, int status, key_serial_t peerid)
        struct sock_xprt *lower_transport =
                                container_of(lower_xprt, struct sock_xprt, xprt);
 
-       lower_transport->xprt_err = status ? -EACCES : 0;
+       switch (status) {
+       case 0:
+       case -EACCES:
+       case -ETIMEDOUT:
+               lower_transport->xprt_err = status;
+               break;
+       default:
+               lower_transport->xprt_err = -EACCES;
+       }
        complete(&lower_transport->handshake_done);
        xprt_put(lower_xprt);
 }