* [PATCH] NFS: don't try to decode GETATTR if DELEGRETURN returned error
@ 2010-03-21 11:17 Jeff Layton
2010-03-21 16:15 ` Trond Myklebust
0 siblings, 1 reply; 2+ messages in thread
From: Jeff Layton @ 2010-03-21 11:17 UTC (permalink / raw)
To: trond.myklebust; +Cc: linux-nfs, nfsv4
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>
---
fs/nfs/nfs4xdr.c | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c
index 4d338be..dd17713 100644
--- a/fs/nfs/nfs4xdr.c
+++ b/fs/nfs/nfs4xdr.c
@@ -5552,6 +5552,8 @@ static int nfs4_xdr_dec_delegreturn(struct rpc_rqst *rqstp, __be32 *p, struct nf
if (status != 0)
goto out;
status = decode_delegreturn(&xdr);
+ if (status != 0)
+ goto out;
decode_getfattr(&xdr, res->fattr, res->server,
!RPC_IS_ASYNC(rqstp->rq_task));
out:
--
1.6.6.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] NFS: don't try to decode GETATTR if DELEGRETURN returned error
2010-03-21 11:17 [PATCH] NFS: don't try to decode GETATTR if DELEGRETURN returned error Jeff Layton
@ 2010-03-21 16:15 ` Trond Myklebust
0 siblings, 0 replies; 2+ messages in thread
From: Trond Myklebust @ 2010-03-21 16:15 UTC (permalink / raw)
To: Jeff Layton; +Cc: linux-nfs, nfsv4
On Sun, 2010-03-21 at 07:17 -0400, Jeff Layton wrote:
> 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>
Applied. Thanks!
Trond
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2010-03-21 16:16 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-03-21 11:17 [PATCH] NFS: don't try to decode GETATTR if DELEGRETURN returned error Jeff Layton
2010-03-21 16:15 ` Trond Myklebust
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox