Commit 2b44f1ba authored by Benny Halevy's avatar Benny Halevy Committed by J. Bruce Fields

nfsd4: adjust buflen for encoded attrs bitmap based on actual bitmap length

The existing code adjusted it based on the worst case scenario for the returned
bitmap and the best case scenario for the supported attrs attribute.
Signed-off-by: default avatarBenny Halevy <bhalevy@panasas.com>
[bfields@redhat.com: removed likely/unlikely's]
Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
parent c135e84a
...@@ -1805,19 +1805,23 @@ nfsd4_encode_fattr(struct svc_fh *fhp, struct svc_export *exp, ...@@ -1805,19 +1805,23 @@ nfsd4_encode_fattr(struct svc_fh *fhp, struct svc_export *exp,
goto out_nfserr; 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(3);
WRITE32(bmval0); WRITE32(bmval0);
WRITE32(bmval1); WRITE32(bmval1);
WRITE32(bmval2); WRITE32(bmval2);
} else if (likely(bmval1)) { } else if (bmval1) {
if ((buflen -= 12) < 0)
goto out_resource;
WRITE32(2); WRITE32(2);
WRITE32(bmval0); WRITE32(bmval0);
WRITE32(bmval1); WRITE32(bmval1);
} else { } else {
if ((buflen -= 8) < 0)
goto out_resource;
WRITE32(1); WRITE32(1);
WRITE32(bmval0); WRITE32(bmval0);
} }
...@@ -1828,15 +1832,17 @@ nfsd4_encode_fattr(struct svc_fh *fhp, struct svc_export *exp, ...@@ -1828,15 +1832,17 @@ nfsd4_encode_fattr(struct svc_fh *fhp, struct svc_export *exp,
u32 word1 = nfsd_suppattrs1(minorversion); u32 word1 = nfsd_suppattrs1(minorversion);
u32 word2 = nfsd_suppattrs2(minorversion); u32 word2 = nfsd_suppattrs2(minorversion);
if ((buflen -= 12) < 0)
goto out_resource;
if (!aclsupport) if (!aclsupport)
word0 &= ~FATTR4_WORD0_ACL; word0 &= ~FATTR4_WORD0_ACL;
if (!word2) { if (!word2) {
if ((buflen -= 12) < 0)
goto out_resource;
WRITE32(2); WRITE32(2);
WRITE32(word0); WRITE32(word0);
WRITE32(word1); WRITE32(word1);
} else { } else {
if ((buflen -= 16) < 0)
goto out_resource;
WRITE32(3); WRITE32(3);
WRITE32(word0); WRITE32(word0);
WRITE32(word1); WRITE32(word1);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment