lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20080812192419.GU28946@ZenIV.linux.org.uk>
Date:	Tue, 12 Aug 2008 20:24:19 +0100
From:	Al Viro <viro@...IV.linux.org.uk>
To:	Linus Torvalds <torvalds@...ux-foundation.org>
Cc:	OGAWA Hirofumi <hirofumi@...l.parknet.co.jp>,
	linux-fsdevel@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [RFC] readdir mess

On Tue, Aug 12, 2008 at 07:37:45PM +0100, Al Viro wrote:

> FWIW, how about that sequence:
> 
> Patch 1:
> Turn all filldir(...) < 0 into filldir() != 0 in ->readdir() instances,
> no changes other than that.  Everything should keep working as-is.
> 
> Patch 2:
> Make fillonedir() return 1 on the second call; make filldir() et.al.
> return 1 instead of -EINVAL if we have ->previous != NULL.  Again,
> should be no breakage.

aargh...
Patch 2.5:
  Fix braindead instances of ->readdir() that return odd crap on success
  (e.g. coda_readdir() returning the count of filldir calls that had returned
  zero).

> Patch 3: switch ->readdir() to your "return anything non-null we got from
> callback".  AFAICS, main callers will see no breakage, but in any case
> we have few enough of those to adjust them as needed first.
> 
> Patch 4: get rid of ->error and its ilk; adjust callers in obvious ways
> (e.g. sys_gtedents() would bail out on negative from vfs_readdir() as
> it does now and treat 0 and 1 in the same way - put_user() ? -EFAULT : <how
> much did we copy).  Callers can be taken care one by one.  Again, no breakage
> and everything's bisectable.
> 
> Patch 5 (maybe):
> #define READDIR_MORE INT_MAX
> Have ->readdir() instances that decide to stop once they'd done several
> filldir calls return it if there's still more left.
> Have vfs_readdir() loop calling ->readdir() as long as it gets READDIR_MORE.
> Get rid of weird loops in callers.
> 
> I'm not sure that the last one is needed - we might be better off just by
> making the such instances loop themselves.  In any case, loops in callers
> (nfsd, etc.) are begging for trouble...
> --
> To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
> the body of a message to majordomo@...r.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ