Date: Tue, 29 Jan 2008 21:40:54 GMT From: Juli Mallett <juli@clockworksquid.com> To: freebsd-gnats-submit@FreeBSD.org Subject: kern/120128: __getcwd erroneously returning ENOENT Message-ID: <200801292140.m0TLesbt083061@www.freebsd.org> Resent-Message-ID: <200801292150.m0TLo11Q089395@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 120128 >Category: kern >Synopsis: __getcwd erroneously returning ENOENT >Confidential: no >Severity: non-critical >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Tue Jan 29 21:50:01 UTC 2008 >Closed-Date: >Last-Modified: >Originator: Juli Mallett >Release: 8.0-CURRENT, kern.osreldate: 800008 >Organization: >Environment: FreeBSD alala.evergreen.edu 8.0-CURRENT FreeBSD 8.0-CURRENT #7: Tue Jan 8 16:03:13 PST 2008 root@alala.evergreen.edu:/usr/obj/usr/src/sys/ALALA amd64 >Description: When removing subdirectories, __getcwd is sometimes falsely returning ENOENT, and continues to do so until pwd -L is invoked (it is the stat($PWD) that fixes the problem, presumably this is updating some cached information somewhere?) in a specific configuration (with a few edge-cases). This only occurs with tcsh for me, not sh, because the sh builtin compensates for the problem. ^_^ (mallettj@alala:~)267% cd pwd ^_^ (mallettj@alala:~/pwd)268% mkdir foo ; cd foo ; mkdir bar ; rm -rf bar ; pwd -P ; cd .. ; rm -rf foo pwd: .: Permission denied ^_^ (mallettj@alala:~/pwd)269% mkdir foo ; cd foo ; mkdir bar ; rm -rf bar ; pwd -L ; cd .. ; rm -rf foo /home/mallettj/pwd/foo ^_^ (mallettj@alala:~/pwd)270% mkdir foo ; cd foo ; mkdir bar ; rm -rf bar ; ~/pwd/pwd -P ; cd .. ; rm -rf foo /data/home/mallettj/pwd/foo ^_^ (mallettj@alala:~/pwd)271% ls -lartd . drwxr-xr-x 3 mallettj mallettj 512 Jan 29 15:38 . ^_^ (mallettj@alala:~/pwd)272% pwd -L /home/mallettj/pwd ^_^ (mallettj@alala:~/pwd)273% pwd -P /data/home/mallettj/pwd ^_^ (mallettj@alala:~/pwd)274% ls -lartd /data drwxr-xr-x 8 root wheel 512 Jul 5 2007 /data ^_^ (mallettj@alala:~/pwd)275% ls -lartd /data/home drwx--x--x 9 root wheel 512 Jan 23 19:00 /data/home ^_^ (mallettj@alala:~/pwd)276% ls -lartd /data/home/mallettj drwxr-xr-x 13 mallettj mallettj 1024 Jan 29 15:34 /data/home/mallettj ^_^ (mallettj@alala:~/pwd)277% ls -lartd /data/home/mallettj/pwd drwxr-xr-x 3 mallettj mallettj 512 Jan 29 15:38 /data/home/mallettj/pwd ^_^ (mallettj@alala:~/pwd)278% ls -lartd /home lrwxr-xr-x 1 root wheel 10 Jun 21 2007 /home -> /data/home ^_^ (mallettj@alala:~/pwd)279% cvs diff -u pwd.c socket: Protocol not supported Index: pwd.c =================================================================== RCS file: /home/ncvs/src/bin/pwd/pwd.c,v retrieving revision 1.25 diff -u -r1.25 pwd.c --- pwd.c 9 Feb 2005 17:37:38 -0000 1.25 +++ pwd.c 29 Jan 2008 21:39:47 -0000 @@ -84,6 +84,8 @@ * If we're trying to find the logical current directory and that * fails, behave as if -P was specified. */ + struct stat phy; + stat(getenv("PWD"), &phy); if ((!physical && (p = getcwd_logical()) != NULL) || (p = getcwd(NULL, 0)) != NULL) printf("%s\n", p); >How-To-Repeat: tcsh -c 'mkdir foo ; cd foo ; mkdir bar ; rm -rf bar ; pwd -P ; cd .. ; rm -rf foo' >Fix: Unlikely to have time to dig in to the kernel to figure out the root cause. Want to stress that the patch in the full description (obviously) is not a solution, should someone stumble over this bug and think it is. This affects all callers of getcwd, including my shell: ^_^ (mallettj@alala:~/pwd)286% tcsh -c 'mkdir foo ; cd foo ; mkdir bar ; rm -rf bar ; pwd -P ; cd .. ; rm -rf foo' tcsh: Permission denied tcsh: Trying to start from "/home/mallettj" pwd: .: Permission denied ^_^ (mallettj@alala:~/pwd)287% pwd -L /home/mallettj/pwd ^_^ (mallettj@alala:~/pwd)288% tcsh -c 'mkdir foo ; cd foo ; mkdir bar ; rm -rf bar ; pwd -P ; cd .. ; rm -rf foo' pwd: .: Permission denied >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200801292140.m0TLesbt083061>