]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - fs/nfsd/nfs3xdr.c
Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
[karo-tx-linux.git] / fs / nfsd / nfs3xdr.c
index 452334694a5d1f37cc480e5d1cf2873c4246019d..12feac6ee2fd461a46c7b06b7a0ed0359fb4dfd1 100644 (file)
@@ -334,8 +334,11 @@ nfs3svc_decode_readargs(struct svc_rqst *rqstp, __be32 *p,
        if (!p)
                return 0;
        p = xdr_decode_hyper(p, &args->offset);
-
        args->count = ntohl(*p++);
+
+       if (!xdr_argsize_check(rqstp, p))
+               return 0;
+
        len = min(args->count, max_blocksize);
 
        /* set up the kvec */
@@ -349,7 +352,7 @@ nfs3svc_decode_readargs(struct svc_rqst *rqstp, __be32 *p,
                v++;
        }
        args->vlen = v;
-       return xdr_argsize_check(rqstp, p);
+       return 1;
 }
 
 int
@@ -541,9 +544,11 @@ nfs3svc_decode_readlinkargs(struct svc_rqst *rqstp, __be32 *p,
        p = decode_fh(p, &args->fh);
        if (!p)
                return 0;
+       if (!xdr_argsize_check(rqstp, p))
+               return 0;
        args->buffer = page_address(*(rqstp->rq_next_page++));
 
-       return xdr_argsize_check(rqstp, p);
+       return 1;
 }
 
 int
@@ -569,10 +574,14 @@ nfs3svc_decode_readdirargs(struct svc_rqst *rqstp, __be32 *p,
        args->verf   = p; p += 2;
        args->dircount = ~0;
        args->count  = ntohl(*p++);
+
+       if (!xdr_argsize_check(rqstp, p))
+               return 0;
+
        args->count  = min_t(u32, args->count, PAGE_SIZE);
        args->buffer = page_address(*(rqstp->rq_next_page++));
 
-       return xdr_argsize_check(rqstp, p);
+       return 1;
 }
 
 int
@@ -590,6 +599,9 @@ nfs3svc_decode_readdirplusargs(struct svc_rqst *rqstp, __be32 *p,
        args->dircount = ntohl(*p++);
        args->count    = ntohl(*p++);
 
+       if (!xdr_argsize_check(rqstp, p))
+               return 0;
+
        len = args->count = min(args->count, max_blocksize);
        while (len > 0) {
                struct page *p = *(rqstp->rq_next_page++);
@@ -597,8 +609,7 @@ nfs3svc_decode_readdirplusargs(struct svc_rqst *rqstp, __be32 *p,
                        args->buffer = page_address(p);
                len -= PAGE_SIZE;
        }
-
-       return xdr_argsize_check(rqstp, p);
+       return 1;
 }
 
 int