Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <87czwieui8.fsf@oldenburg.str.redhat.com>
Date: Mon, 01 Mar 2021 16:58:07 +0100
From: Florian Weimer <fweimer@...hat.com>
To: enh <enh@...gle.com>
Cc: libc-coord@...ts.openwall.com,  Rich Felker <dalias@...c.org>
Subject: Re: Lifetime of object returned by readdir

> On Tue, Feb 23, 2021 at 10:32 AM Florian Weimer <fweimer@...hat.com> wrote:
>
>  > POSIX already explicitly says that seekdir() affects the _next_
>  > readdir().
>
>  That's because it's the only way its effect is observable.
>
>  The glibc implementation of seekdir performs an immediate seek, but if
>  the seek fails, that error is not really observable (except for reading
>  the implementation and inferring that the errno = 0 hack will work).  I
>  had not realized that seekdir returns void.  Maybe that argues in favor
>  of a delayed seek upon the next readdir call.
>
>  > does anyone have an implementation where rewinddir()/seekdir()
>  > actually invalidate the previous readdir()? seems unlikely?
>
>  Probably not.  But there's also the issue of fitting the directory
>  offset (usually off64_t, maybe even something larger) into the long int
>  return value of telldir, so there could be quite a bit of magic going on
>  in the background (considering that telldir cannot indicate failure).
>
> i suspect anyone iterating over a directory that large has other
> problems :-)

As has already been said, it's not necessarily a matter of directory
size.

> fwiw, the only calls to telldir() or seekdir() in Android (not
> counting any vendor blobs i can't see the source to) are in the bionic
> unit tests and other languages' runtime wrappers (rust/python).

There are some thorny issues about read position invalidation and file
deletion.  It's strange we don't see more issues around that.  I would
expect that a readdir/unlink loop would fail to empty a directory in at
least some cases.  Maybe bulk deletion tools retry at a higher level if
they encounter an rmdir ENOTEMPTY failure.

Thanks,
Florian

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.