NFSD: change LISTXATTRS cookie encoding to big-endian
authorJorge Mora <jmora1300@gmail.com>
Thu, 25 Jan 2024 14:46:12 +0000 (07:46 -0700)
committerChuck Lever <chuck.lever@oracle.com>
Fri, 1 Mar 2024 14:12:06 +0000 (09:12 -0500)
Function nfsd4_listxattr_validate_cookie() expects the cookie
as an offset to the list thus it needs to be encoded in big-endian.

Fixes: 23e50fe3a5e6 ("nfsd: implement the xattr functions and en/decode logic")
Signed-off-by: Jorge Mora <mora@netapp.com>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
fs/nfsd/nfs4xdr.c

index f0be0d6fe63fd2001692d6c7001e1e014f212bf7..5649076df4b4f7b9f5bc647e1ed5c28539200aa7 100644 (file)
@@ -5407,6 +5407,7 @@ nfsd4_encode_listxattrs(struct nfsd4_compoundres *resp, __be32 nfserr,
        u64 cookie;
        char *sp;
        __be32 status, tmp;
+       __be64 wire_cookie;
        __be32 *p;
        u32 nuser;
 
@@ -5498,7 +5499,8 @@ wreof:
 
        cookie = offset + count;
 
-       write_bytes_to_xdr_buf(xdr->buf, cookie_offset, &cookie, 8);
+       wire_cookie = cpu_to_be64(cookie);
+       write_bytes_to_xdr_buf(xdr->buf, cookie_offset, &wire_cookie, 8);
        tmp = cpu_to_be32(count);
        write_bytes_to_xdr_buf(xdr->buf, count_offset, &tmp, 4);
 out: