|
@@ -369,6 +369,8 @@ nfs3svc_decode_writeargs(struct svc_rqst *rqstp, __be32 *p,
|
|
|
args->count = ntohl(*p++);
|
|
|
args->stable = ntohl(*p++);
|
|
|
len = args->len = ntohl(*p++);
|
|
|
+ if ((void *)p > head->iov_base + head->iov_len)
|
|
|
+ return 0;
|
|
|
/*
|
|
|
* The count must equal the amount of data passed.
|
|
|
*/
|
|
@@ -472,6 +474,8 @@ nfs3svc_decode_symlinkargs(struct svc_rqst *rqstp, __be32 *p,
|
|
|
/* first copy and check from the first page */
|
|
|
old = (char*)p;
|
|
|
vec = &rqstp->rq_arg.head[0];
|
|
|
+ if ((void *)old > vec->iov_base + vec->iov_len)
|
|
|
+ return 0;
|
|
|
avail = vec->iov_len - (old - (char*)vec->iov_base);
|
|
|
while (len && avail && *old) {
|
|
|
*new++ = *old++;
|