I see that NFS4ERR_RESOURCE is returned throughout callback_xdr.c ,but it is not a legal error return for NFSv4.1. -ENOMEM would be better. -->Andy On Tue, Jun 29, 2010 at 6:55 AM, Benny Halevy <bhalevy@xxxxxxxxxxx> wrote: > read_buf may return NULL. return NFS4ERR_RESOURCE in this case. > > Signed-off-by: Benny Halevy <bhalevy@xxxxxxxxxxx> > --- > fs/nfs/callback_xdr.c | 8 ++++++++ > 1 files changed, 8 insertions(+), 0 deletions(-) > > diff --git a/fs/nfs/callback_xdr.c b/fs/nfs/callback_xdr.c > index 7e34bb3..2f69f0d 100644 > --- a/fs/nfs/callback_xdr.c > +++ b/fs/nfs/callback_xdr.c > @@ -247,6 +247,10 @@ static __be32 decode_pnfs_layoutrecall_args(struct svc_rqst *rqstp, > goto out; > > p = read_buf(xdr, 2 * sizeof(uint64_t)); > + if (unlikely(p == NULL)) { > + status = htonl(NFS4ERR_RESOURCE); > + goto out; > + } > p = xdr_decode_hyper(p, &args->cbl_seg.offset); > p = xdr_decode_hyper(p, &args->cbl_seg.length); > status = decode_stateid(xdr, &args->cbl_stateid); > @@ -254,6 +258,10 @@ static __be32 decode_pnfs_layoutrecall_args(struct svc_rqst *rqstp, > goto out; > } else if (args->cbl_recall_type == RETURN_FSID) { > p = read_buf(xdr, 2 * sizeof(uint64_t)); > + if (unlikely(p == NULL)) { > + status = htonl(NFS4ERR_RESOURCE); > + goto out; > + } > p = xdr_decode_hyper(p, &args->cbl_fsid.major); > p = xdr_decode_hyper(p, &args->cbl_fsid.minor); > } > -- > 1.6.6.1 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-nfs" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html