summaryrefslogtreecommitdiff
path: root/net/sunrpc
diff options
context:
space:
mode:
authorBenjamin Coddington <bcodding@redhat.com>2025-02-11 12:31:57 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2025-03-07 18:25:27 +0100
commite4cfa6aa05e512ba45651f19f2fad984747e9dac (patch)
tree503af46316850f7844729066486c7fa40f543847 /net/sunrpc
parent4fe4ae6c2e01d028856b73b6328b12b8945df871 (diff)
downloadlinux-e4cfa6aa05e512ba45651f19f2fad984747e9dac.tar.gz
linux-e4cfa6aa05e512ba45651f19f2fad984747e9dac.tar.bz2
linux-e4cfa6aa05e512ba45651f19f2fad984747e9dac.zip
SUNRPC: Handle -ETIMEDOUT return from tlshd
[ 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>
Diffstat (limited to 'net/sunrpc')
-rw-r--r--net/sunrpc/xprtsock.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
index b69e6290acfa..171ad4e2523f 100644
--- a/net/sunrpc/xprtsock.c
+++ b/net/sunrpc/xprtsock.c
@@ -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);
}