|
@@ -1805,19 +1805,23 @@ nfsd4_encode_fattr(struct svc_fh *fhp, struct svc_export *exp,
|
|
|
goto out_nfserr;
|
|
|
}
|
|
|
}
|
|
|
- if ((buflen -= 16) < 0)
|
|
|
- goto out_resource;
|
|
|
|
|
|
- if (unlikely(bmval2)) {
|
|
|
+ if (bmval2) {
|
|
|
+ if ((buflen -= 16) < 0)
|
|
|
+ goto out_resource;
|
|
|
WRITE32(3);
|
|
|
WRITE32(bmval0);
|
|
|
WRITE32(bmval1);
|
|
|
WRITE32(bmval2);
|
|
|
- } else if (likely(bmval1)) {
|
|
|
+ } else if (bmval1) {
|
|
|
+ if ((buflen -= 12) < 0)
|
|
|
+ goto out_resource;
|
|
|
WRITE32(2);
|
|
|
WRITE32(bmval0);
|
|
|
WRITE32(bmval1);
|
|
|
} else {
|
|
|
+ if ((buflen -= 8) < 0)
|
|
|
+ goto out_resource;
|
|
|
WRITE32(1);
|
|
|
WRITE32(bmval0);
|
|
|
}
|
|
@@ -1828,15 +1832,17 @@ nfsd4_encode_fattr(struct svc_fh *fhp, struct svc_export *exp,
|
|
|
u32 word1 = nfsd_suppattrs1(minorversion);
|
|
|
u32 word2 = nfsd_suppattrs2(minorversion);
|
|
|
|
|
|
- if ((buflen -= 12) < 0)
|
|
|
- goto out_resource;
|
|
|
if (!aclsupport)
|
|
|
word0 &= ~FATTR4_WORD0_ACL;
|
|
|
if (!word2) {
|
|
|
+ if ((buflen -= 12) < 0)
|
|
|
+ goto out_resource;
|
|
|
WRITE32(2);
|
|
|
WRITE32(word0);
|
|
|
WRITE32(word1);
|
|
|
} else {
|
|
|
+ if ((buflen -= 16) < 0)
|
|
|
+ goto out_resource;
|
|
|
WRITE32(3);
|
|
|
WRITE32(word0);
|
|
|
WRITE32(word1);
|