From owner-freebsd-bugs@FreeBSD.ORG Tue Jan 29 21:50:02 2008 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 1A10616A417 for ; Tue, 29 Jan 2008 21:50:02 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id EB79A13C45D for ; Tue, 29 Jan 2008 21:50:01 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.14.2/8.14.2) with ESMTP id m0TLo1H7089396 for ; Tue, 29 Jan 2008 21:50:01 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.2/8.14.1/Submit) id m0TLo11Q089395; Tue, 29 Jan 2008 21:50:01 GMT (envelope-from gnats) Resent-Date: Tue, 29 Jan 2008 21:50:01 GMT Resent-Message-Id: <200801292150.m0TLo11Q089395@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Juli Mallett Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 682A116A468 for ; Tue, 29 Jan 2008 21:42:41 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (www.freebsd.org [IPv6:2001:4f8:fff6::21]) by mx1.freebsd.org (Postfix) with ESMTP id 5740113C457 for ; Tue, 29 Jan 2008 21:42:41 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (localhost [127.0.0.1]) by www.freebsd.org (8.14.2/8.14.2) with ESMTP id m0TLes6k083062 for ; Tue, 29 Jan 2008 21:40:54 GMT (envelope-from nobody@www.freebsd.org) Received: (from nobody@localhost) by www.freebsd.org (8.14.2/8.14.1/Submit) id m0TLesbt083061; Tue, 29 Jan 2008 21:40:54 GMT (envelope-from nobody) Message-Id: <200801292140.m0TLesbt083061@www.freebsd.org> Date: Tue, 29 Jan 2008 21:40:54 GMT From: Juli Mallett To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-3.1 Cc: Subject: kern/120128: __getcwd erroneously returning ENOENT X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 29 Jan 2008 21:50:02 -0000 >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: