Commit 6f54e2d0 authored by J. Bruce Fields's avatar J. Bruce Fields Committed by Linus Torvalds

[PATCH] knfsd: svcrpc: WARN() instead of returning an error from svc_take_page

Every caller of svc_take_page ignores its return value and assumes it
succeeded.  So just WARN() instead of returning an ignored error.  This would
have saved some time debugging a recent nfsd4 problem.

If there are still failure cases here, then the result is probably that we
overwrite an earlier part of the reply while xdr-encoding.

While the corrupted reply is a nasty bug, it would be worse to panic here and
create the possibility of a remote DOS; hence WARN() instead of BUG().
Signed-off-by: default avatarJ. Bruce Fields <bfields@citi.umich.edu>
Signed-off-by: default avatarNeil Brown <neilb@suse.de>
Cc: Ingo Oeser <ioe-lkml@rameria.de>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent dfee55f0
...@@ -197,15 +197,16 @@ svc_take_res_page(struct svc_rqst *rqstp) ...@@ -197,15 +197,16 @@ svc_take_res_page(struct svc_rqst *rqstp)
return rqstp->rq_respages[rqstp->rq_resused++]; return rqstp->rq_respages[rqstp->rq_resused++];
} }
static inline int svc_take_page(struct svc_rqst *rqstp) static inline void svc_take_page(struct svc_rqst *rqstp)
{ {
if (rqstp->rq_arghi <= rqstp->rq_argused) if (rqstp->rq_arghi <= rqstp->rq_argused) {
return -ENOMEM; WARN_ON(1);
return;
}
rqstp->rq_arghi--; rqstp->rq_arghi--;
rqstp->rq_respages[rqstp->rq_resused] = rqstp->rq_respages[rqstp->rq_resused] =
rqstp->rq_argpages[rqstp->rq_arghi]; rqstp->rq_argpages[rqstp->rq_arghi];
rqstp->rq_resused++; rqstp->rq_resused++;
return 0;
} }
static inline void svc_pushback_allpages(struct svc_rqst *rqstp) static inline void svc_pushback_allpages(struct svc_rqst *rqstp)
......
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