Skip to content

Commit

Permalink
tls: Fix tls_sw_sendmsg error handling
Browse files Browse the repository at this point in the history
We've noticed that NFS can hang when using RPC over TLS on an unstable
connection, and investigation shows that the RPC layer is stuck in a tight
loop attempting to transmit, but forever getting -EBADMSG back from the
underlying network.  The loop begins when tcp_sendmsg_locked() returns
-EPIPE to tls_tx_records(), but that error is converted to -EBADMSG when
calling the socket's error reporting handler.

Instead of converting errors from tcp_sendmsg_locked(), let's pass them
along in this path.  The RPC layer handles -EPIPE by reconnecting the
transport, which prevents the endless attempts to transmit on a broken
connection.

Signed-off-by: Benjamin Coddington <[email protected]>
Fixes: a42055e ("net/tls: Add support for async encryption of records for performance")
Link: https://patch.msgid.link/9594185559881679d81f071b181a10eb07cd079f.1736004079.git.bcodding@redhat.com
Signed-off-by: Jakub Kicinski <[email protected]>
  • Loading branch information
bcodding-rh authored and kuba-moo committed Jan 8, 2025
1 parent 9597893 commit b341ca5
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion net/tls/tls_sw.c
Original file line number Diff line number Diff line change
Expand Up @@ -458,7 +458,7 @@ int tls_tx_records(struct sock *sk, int flags)

tx_err:
if (rc < 0 && rc != -EAGAIN)
tls_err_abort(sk, -EBADMSG);
tls_err_abort(sk, rc);

return rc;
}
Expand Down

0 comments on commit b341ca5

Please sign in to comment.