NFS: don't try to decode GETATTR if DELEGRETURN returned error
authorJeff Layton <jlayton@redhat.com>
Sun, 21 Mar 2010 16:10:36 +0000 (12:10 -0400)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Mon, 22 Mar 2010 09:34:13 +0000 (05:34 -0400)
commit556ae3bb32cabe483375b857dda1322384c57b65
treebad9e8bbf7dbb8d194346c8904dcfe172a94c7f0
parentf1f0abe192a72e75d7c59972e30784d043fd8d73
NFS: don't try to decode GETATTR if DELEGRETURN returned error

The reply parsing code attempts to decode the GETATTR response even if
the DELEGRETURN portion of the compound returned an error. The GETATTR
response won't actually exist if that's the case and we're asking the
parser to read past the end of the response.

This bug is fairly benign. The parser catches this without reading past
the end of the response and decode_getfattr returns -EIO. Earlier
kernels however had decode_op_hdr using the READ_BUF macro, and this
bug would make this printk pop any time the client got an error from
a delegreturn:

kernel: decode_op_hdr: reply buffer overflowed in line XXXX

More recent kernels seem to have replaced this printk with a dprintk.

Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
fs/nfs/nfs4xdr.c