open /dev/null O_NOFOLLOW fails with ELOOP
gs-cygwin.com@gluelogic.com
gs-cygwin.com@gluelogic.com
Wed Dec 21 19:32:54 GMT 2022
On Wed, Dec 21, 2022 at 03:29:42PM +0100, Corinna Vinschen via Cygwin wrote:
> Hi Glenn,
>
> On Dec 21 12:31, Corinna Vinschen via Cygwin wrote:
> > On Dec 21 06:15, gs-cygwin.com--- via Cygwin wrote:
> > > open /dev/null O_NOFOLLOW fails with ELOOP
> > >
> > > Windows 10, 64-bit cygwin
> > >
> > > Failed with my existing install, then I ran setup.exe, updated to
> > > latest, and my tests still failed.
> > >
> > > a.c
> > > ---
> > >
> > > #include <sys/types.h>
> > > #include <fcntl.h>
> > > #include <stdio.h>
> > >
> > > int main (void)
> > > {
> > > int fd = open("/dev/null", O_RDWR | O_NOFOLLOW, 0);
> > > if (fd < 0)
> > > perror("open(/dev/null)");
> > > return fd;
> > > }
> > >
> > >
> > > $ gcc a.c ; ./a.exe
> > > open(/dev/null): Too many levels of symbolic links
> > >
> > > While troubleshooting this, there were times where it succeeded and then
> > > times where it failed, though it failed most of the time. It did not
> > > fail (or succeed) randomly, but seemingly in streaks.
> > >
> > > Trying to start lighttpd seems to run into this bug reliably,
> > > $ /usr/sbin/lighttpd -D -f /etc/lighttpd/lighttpd.conf
> > > In the next release of lighttpd, I may end up omitting O_NOFOLLOW
> > > if __CYGWIN__ is defined.
> >
> > Thanks for the report. I think I see what's going on, stay tuned.
>
> I pushed a patch:
> https://cygwin.com/git/?p=newlib-cygwin.git;a=commitdiff;h=09cb4cd2940f
>
> Please try the latest test release cygwin-3.5.0-0.60.g09cb4cd2940f.
> For installation, see https://cygwin.com/faq.html#faq.setup.testrels
>
>
> Thanks,
> Corinna
cygwin-3.5.0-0.60.g09cb4cd2940f works for my test case and for lighttpd.
I was unable to reproduce the problem after (somewhat limited) testing
with the test version.
When I reverted back to 3.4.3-1, I was immediately able to reproduce the
issue with 3.4.3-1.
Thank you! Happy Holidays!
Cheers, Glenn
More information about the Cygwin
mailing list