NFSD: fix endianness issue in nfsd4_encode_fattr4
authorVasily Gorbik <gor@linux.ibm.com>
Thu, 11 Apr 2024 09:45:57 +0000 (11:45 +0200)
committerChuck Lever <chuck.lever@oracle.com>
Thu, 11 Apr 2024 13:21:06 +0000 (09:21 -0400)
commitf488138b526715c6d2568d7329c4477911be4210
tree3fb9512b1140887e0ffd5af2d40c5451fb64da88
parenta4833e3abae132d613ce7da0e0c9a9465d1681fa
NFSD: fix endianness issue in nfsd4_encode_fattr4

The nfs4 mount fails with EIO on 64-bit big endian architectures since
v6.7. The issue arises from employing a union in the nfsd4_encode_fattr4()
function to overlay a 32-bit array with a 64-bit values based bitmap,
which does not function as intended. Address the endianness issue by
utilizing bitmap_from_arr32() to copy 32-bit attribute masks into a
bitmap in an endianness-agnostic manner.

Cc: stable@vger.kernel.org
Fixes: fce7913b13d0 ("NFSD: Use a bitmask loop to encode FATTR4 results")
Link: https://bugs.launchpad.net/ubuntu/+source/nfs-utils/+bug/2060217
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
fs/nfsd/nfs4xdr.c