2017-05-09 20:25:02

by Trond Myklebust

[permalink] [raw]
Subject: [PATCH] nfsd: Fix up the "supattr_exclcreat" attributes

If an NFSv4 client asks us for the supattr_exclcreat, then we must
not return attributes that are unsupported by this minor version.

Signed-off-by: Trond Myklebust <[email protected]>
Fixes: 75976de6556f ("NFSD: Return word2 bitmask if setting security..,")
---
fs/nfsd/nfs4xdr.c | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
index 33017d652b1d..187498db0aa9 100644
--- a/fs/nfsd/nfs4xdr.c
+++ b/fs/nfsd/nfs4xdr.c
@@ -2831,9 +2831,14 @@ nfsd4_encode_fattr(struct xdr_stream *xdr, struct svc_fh *fhp,
}
#endif /* CONFIG_NFSD_PNFS */
if (bmval2 & FATTR4_WORD2_SUPPATTR_EXCLCREAT) {
- status = nfsd4_encode_bitmap(xdr, NFSD_SUPPATTR_EXCLCREAT_WORD0,
- NFSD_SUPPATTR_EXCLCREAT_WORD1,
- NFSD_SUPPATTR_EXCLCREAT_WORD2);
+ u32 supp[3];
+
+ memcpy(supp, nfsd_suppattrs[minorversion], sizeof(supp));
+ supp[0] &= NFSD_SUPPATTR_EXCLCREAT_WORD0;
+ supp[1] &= NFSD_SUPPATTR_EXCLCREAT_WORD1;
+ supp[2] &= NFSD_SUPPATTR_EXCLCREAT_WORD2;
+
+ status = nfsd4_encode_bitmap(xdr, supp[0], supp[1], supp[2]);
if (status)
goto out;
}
--
2.9.3



2017-05-09 20:57:00

by J. Bruce Fields

[permalink] [raw]
Subject: Re: [PATCH] nfsd: Fix up the "supattr_exclcreat" attributes

On Tue, May 09, 2017 at 04:24:59PM -0400, Trond Myklebust wrote:
> If an NFSv4 client asks us for the supattr_exclcreat, then we must
> not return attributes that are unsupported by this minor version.

Thanks! Applying with a stable cc.

--b.

>
> Signed-off-by: Trond Myklebust <[email protected]>
> Fixes: 75976de6556f ("NFSD: Return word2 bitmask if setting security..,")
> ---
> fs/nfsd/nfs4xdr.c | 11 ++++++++---
> 1 file changed, 8 insertions(+), 3 deletions(-)
>
> diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
> index 33017d652b1d..187498db0aa9 100644
> --- a/fs/nfsd/nfs4xdr.c
> +++ b/fs/nfsd/nfs4xdr.c
> @@ -2831,9 +2831,14 @@ nfsd4_encode_fattr(struct xdr_stream *xdr, struct svc_fh *fhp,
> }
> #endif /* CONFIG_NFSD_PNFS */
> if (bmval2 & FATTR4_WORD2_SUPPATTR_EXCLCREAT) {
> - status = nfsd4_encode_bitmap(xdr, NFSD_SUPPATTR_EXCLCREAT_WORD0,
> - NFSD_SUPPATTR_EXCLCREAT_WORD1,
> - NFSD_SUPPATTR_EXCLCREAT_WORD2);
> + u32 supp[3];
> +
> + memcpy(supp, nfsd_suppattrs[minorversion], sizeof(supp));
> + supp[0] &= NFSD_SUPPATTR_EXCLCREAT_WORD0;
> + supp[1] &= NFSD_SUPPATTR_EXCLCREAT_WORD1;
> + supp[2] &= NFSD_SUPPATTR_EXCLCREAT_WORD2;
> +
> + status = nfsd4_encode_bitmap(xdr, supp[0], supp[1], supp[2]);
> if (status)
> goto out;
> }
> --
> 2.9.3