[Top] [All Lists]

Re: [PATCH 2/3] xfs: truncate readdir offsets to signed 32 bit values

To: Christoph Hellwig <hch@xxxxxxxxxxxxx>
Subject: Re: [PATCH 2/3] xfs: truncate readdir offsets to signed 32 bit values
From: Dave Chinner <david@xxxxxxxxxxxxx>
Date: Fri, 9 Jan 2009 09:43:50 +1100
Cc: xfs@xxxxxxxxxxx
In-reply-to: <20090108190000.GA8440@xxxxxxxxxxxxx>
Mail-followup-to: Christoph Hellwig <hch@xxxxxxxxxxxxx>, xfs@xxxxxxxxxxx
References: <20090108184222.244013000@xxxxxxxxxxxxxxxxxxxxxx> <20090108184430.165424000@xxxxxxxxxxxxxxxxxxxxxx> <20090108190000.GA8440@xxxxxxxxxxxxx>
User-agent: Mutt/1.5.18 (2008-05-17)
On Thu, Jan 08, 2009 at 02:00:00PM -0500, Christoph Hellwig wrote:
> On Thu, Jan 08, 2009 at 01:42:24PM -0500, Christoph Hellwig wrote:
> > John Stanley reported EOVERFLOW errors in readdir from his self-build
> > glibc.  I traced this down to glibc enabling d_off overflow checks
> > in one of the about five million different getdents implementations.
> > 
> > In 2.6.28 Dave Woodhouse moved our readdir double buffering required
> > for NFS4 readdirplus into nfsd and at that point we lost the capping
> > of the directory offsets to 32 bit signed values.  Johns glibc used
> > getdents64 to even implement readdir for normal 32 bit offset dirents,
> > and failed with EOVERFLOW only if this happens on the first dirent in
> > a getdents call.  I managed to come up with a testcase that uses
> > raw getdents and does the EOVERFLOW check manually.  We always hit
> > it with our last entry due to the special end of directory marker.
> > 
> > The patch below is a dumb version of just putting back the masking,
> > to make sure we have the same behavior as in 2.6.27 and earlier.
> > 
> > I will work on a better and cleaner fix for 2.6.30.
> > 
> > Reported-by: John Stanley <jpsinthemix@xxxxxxxxxxx>
> > Tested-by: John Stanley <jpsinthemix@xxxxxxxxxxx>
> > Signed-off-by: Christoph Hellwig <hch@xxxxxx>
> As arkem noticed I should not have sent out some half-mangled version
> but the first crude patch.  Here it is:

Reviewed-by: Dave Chinner <david@xxxxxxxxxxxxx>

Dave Chinner

<Prev in Thread] Current Thread [Next in Thread>