Skip to content

Commit 0d3ca07

Browse files
chuckleverTrond Myklebust
authored andcommitted
SUNRPC: Ignore data_ready callbacks during TLS handshakes
The RPC header parser doesn't recognize TLS handshake traffic, so it will close the connection prematurely with an error. To avoid that, shunt the transport's data_ready callback when there is a TLS handshake in progress. The XPRT_SOCK_IGNORE_RECV flag will be toggled by code added in a subsequent patch. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Reviewed-by: Jeff Layton <jlayton@kernel.org> Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
1 parent 1207265 commit 0d3ca07

File tree

2 files changed

+7
-0
lines changed

2 files changed

+7
-0
lines changed

include/linux/sunrpc/xprtsock.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,5 +90,6 @@ struct sock_xprt {
9090
#define XPRT_SOCK_WAKE_DISCONNECT (7)
9191
#define XPRT_SOCK_CONNECT_SENT (8)
9292
#define XPRT_SOCK_NOSPACE (9)
93+
#define XPRT_SOCK_IGNORE_RECV (10)
9394

9495
#endif /* _LINUX_SUNRPC_XPRTSOCK_H */

net/sunrpc/xprtsock.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -700,6 +700,8 @@ static void xs_poll_check_readable(struct sock_xprt *transport)
700700
{
701701

702702
clear_bit(XPRT_SOCK_DATA_READY, &transport->sock_state);
703+
if (test_bit(XPRT_SOCK_IGNORE_RECV, &transport->sock_state))
704+
return;
703705
if (!xs_poll_socket_readable(transport))
704706
return;
705707
if (!test_and_set_bit(XPRT_SOCK_DATA_READY, &transport->sock_state))
@@ -1385,6 +1387,10 @@ static void xs_data_ready(struct sock *sk)
13851387
trace_xs_data_ready(xprt);
13861388

13871389
transport->old_data_ready(sk);
1390+
1391+
if (test_bit(XPRT_SOCK_IGNORE_RECV, &transport->sock_state))
1392+
return;
1393+
13881394
/* Any data means we had a useful conversation, so
13891395
* then we don't need to delay the next reconnect
13901396
*/

0 commit comments

Comments
 (0)