]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
NFSD: fix decoding in nfs4_xdr_dec_cb_getattr
authorOlga Kornievskaia <okorniev@redhat.com>
Thu, 19 Dec 2024 20:12:04 +0000 (15:12 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 20 Apr 2025 08:16:00 +0000 (10:16 +0200)
commit 1b3e26a5ccbfc2f85bda1930cc278e313165e353 upstream.

If a client were to send an error to a CB_GETATTR call, the code
erronously continues to try decode past the error code. It ends
up returning BAD_XDR error to the rpc layer and then in turn
trigger a WARN_ONCE in nfsd4_cb_done() function.

Fixes: 6487a13b5c6b ("NFSD: add support for CB_GETATTR callback")
Signed-off-by: Olga Kornievskaia <okorniev@redhat.com>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
Reviewed-by: Benjamin Coddington <bcodding@redhat.com>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/nfsd/nfs4callback.c

index 88c03e18257323213700ead4f0e7d5ffd73d03d3..e19702021049a07a4c1e030e5a199622e426c1c6 100644 (file)
@@ -605,7 +605,7 @@ static int nfs4_xdr_dec_cb_getattr(struct rpc_rqst *rqstp,
                return status;
 
        status = decode_cb_op_status(xdr, OP_CB_GETATTR, &cb->cb_status);
-       if (status)
+       if (unlikely(status || cb->cb_seq_status))
                return status;
        if (xdr_stream_decode_uint32_array(xdr, bitmap, 3) < 0)
                return -NFSERR_BAD_XDR;