summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff Layton <jlayton@kernel.org>2024-08-21 08:28:25 -0400
committerAnna Schumaker <Anna.Schumaker@Netapp.com>2024-08-22 17:01:10 -0400
commit95832998fb6edc50d4f2f6a958d9f90142d4be48 (patch)
tree94ae5ecea5f733eb298703a8eb48d12b9d6aedd9
parentcb78f9b7d0c0c9f86d8c0ac9c46b8b684d8785a9 (diff)
downloadlinux-stable-95832998fb6edc50d4f2f6a958d9f90142d4be48.tar.gz
linux-stable-95832998fb6edc50d4f2f6a958d9f90142d4be48.tar.bz2
linux-stable-95832998fb6edc50d4f2f6a958d9f90142d4be48.zip
nfs: fix bitmap decoder to handle a 3rd word
It only decodes the first two words at this point. Have it decode the third word as well. Without this, the client doesn't send delegated timestamps in the CB_GETATTR response. With this change we also need to expand the on-stack bitmap in decode_recallany_args to 3 elements, in case the server sends a larger bitmap than expected. Fixes: 43df7110f4a9 ("NFSv4: Add CB_GETATTR support for delegated attributes") Signed-off-by: Jeff Layton <jlayton@kernel.org> Reviewed-by: Benjamin Coddington <bcodding@redhat.com> Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
-rw-r--r--fs/nfs/callback_xdr.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/fs/nfs/callback_xdr.c b/fs/nfs/callback_xdr.c
index 29c49a7e5fe1..6df77f008d3f 100644
--- a/fs/nfs/callback_xdr.c
+++ b/fs/nfs/callback_xdr.c
@@ -118,7 +118,9 @@ static __be32 decode_bitmap(struct xdr_stream *xdr, uint32_t *bitmap)
if (likely(attrlen > 0))
bitmap[0] = ntohl(*p++);
if (attrlen > 1)
- bitmap[1] = ntohl(*p);
+ bitmap[1] = ntohl(*p++);
+ if (attrlen > 2)
+ bitmap[2] = ntohl(*p);
return 0;
}
@@ -446,7 +448,7 @@ static __be32 decode_recallany_args(struct svc_rqst *rqstp,
void *argp)
{
struct cb_recallanyargs *args = argp;
- uint32_t bitmap[2];
+ uint32_t bitmap[3];
__be32 *p, status;
p = xdr_inline_decode(xdr, 4);