Trond Myklebust wrote: > On Fri, 2007-05-25 at 17:41 -0400, Chuck Lever wrote: >> Signed-off-by: Chuck Lever >> --- >> >> fs/nfs/callback_xdr.c | 4 ++-- >> 1 files changed, 2 insertions(+), 2 deletions(-) >> >> diff --git a/fs/nfs/callback_xdr.c b/fs/nfs/callback_xdr.c >> index 849a202..d664193 100644 >> --- a/fs/nfs/callback_xdr.c >> +++ b/fs/nfs/callback_xdr.c >> @@ -139,7 +139,7 @@ static __be32 decode_compound_hdr_arg(struct xdr_stream *xdr, struct cb_compound >> if (unlikely(status != 0)) >> return status; >> /* We do not like overly long tags! */ >> - if (hdr->taglen > CB_OP_TAGLEN_MAXSZ-12 || hdr->taglen < 0) { >> + if (hdr->taglen > CB_OP_TAGLEN_MAXSZ - 12) { >> printk("NFSv4 CALLBACK %s: client sent tag of length %u\n", >> __FUNCTION__, hdr->taglen); >> return htonl(NFS4ERR_RESOURCE); >> @@ -379,7 +379,7 @@ static __be32 process_op(struct svc_rqst *rqstp, >> } >> >> maxlen = xdr_out->end - xdr_out->p; >> - if (maxlen > 0 && maxlen < PAGE_SIZE) { >> + if (maxlen > 0 && maxlen < (long) PAGE_SIZE) { > ^^^^^^ shouldn't be needed. We've just checked that maxlen > 0. In this case, the "greater than zero" check is already there, so there isn't a bug. However, PAGE_SIZE is defined as an "unsigned" value. Comparing it to maxlen, which is "signed", produces a compiler warning. The explicit cast documents that the signed versus unsigned comparison is exactly what we want in this case. Note that we included an explicit cast in the other fixes of this variety. >> if (likely(status == 0 && op->decode_args != NULL)) >> status = op->decode_args(rqstp, xdr_in, argp); >> if (likely(status == 0 && op->process_op != NULL)) >>