]> git.apps.os.sepia.ceph.com Git - ceph-client.git/commitdiff
SUNRPC: call xs_sock_process_cmsg for all cmsg
authorJustin Worrell <jworrell@gmail.com>
Thu, 4 Sep 2025 21:09:57 +0000 (16:09 -0500)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Sat, 6 Sep 2025 20:51:26 +0000 (16:51 -0400)
xs_sock_recv_cmsg was failing to call xs_sock_process_cmsg for any cmsg
type other than TLS_RECORD_TYPE_ALERT (TLS_RECORD_TYPE_DATA, and other
values not handled.) Based on my reading of the previous commit
(cc5d5908: sunrpc: fix client side handling of tls alerts), it looks
like only iov_iter_revert should be conditional on TLS_RECORD_TYPE_ALERT
(but that other cmsg types should still call xs_sock_process_cmsg). On
my machine, I was unable to connect (over mtls) to an NFS share hosted
on FreeBSD. With this patch applied, I am able to mount the share again.

Fixes: cc5d59081fa2 ("sunrpc: fix client side handling of tls alerts")
Signed-off-by: Justin Worrell <jworrell@gmail.com>
Reviewed-and-tested-by: Scott Mayhew <smayhew@redhat.com>
Link: https://lore.kernel.org/r/20250904211038.12874-3-jworrell@gmail.com
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
net/sunrpc/xprtsock.c

index c5f7bbf5775ff8205882633777b3dabe0dd658ae..3aa987e7f0724d0ac28ed74ce53999d02b5a8e70 100644 (file)
@@ -407,9 +407,9 @@ xs_sock_recv_cmsg(struct socket *sock, unsigned int *msg_flags, int flags)
        iov_iter_kvec(&msg.msg_iter, ITER_DEST, &alert_kvec, 1,
                      alert_kvec.iov_len);
        ret = sock_recvmsg(sock, &msg, flags);
-       if (ret > 0 &&
-           tls_get_record_type(sock->sk, &u.cmsg) == TLS_RECORD_TYPE_ALERT) {
-               iov_iter_revert(&msg.msg_iter, ret);
+       if (ret > 0) {
+               if (tls_get_record_type(sock->sk, &u.cmsg) == TLS_RECORD_TYPE_ALERT)
+                       iov_iter_revert(&msg.msg_iter, ret);
                ret = xs_sock_process_cmsg(sock, &msg, msg_flags, &u.cmsg,
                                           -EAGAIN);
        }