From owner-freebsd-bugs@FreeBSD.ORG Tue Aug 26 07:00:28 2003 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id DACDF16A4BF for ; Tue, 26 Aug 2003 07:00:28 -0700 (PDT) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 5AFEB43FE5 for ; Tue, 26 Aug 2003 07:00:27 -0700 (PDT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.12.9/8.12.9) with ESMTP id h7QE0RUp008548 for ; Tue, 26 Aug 2003 07:00:27 -0700 (PDT) (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.12.9/8.12.9/Submit) id h7QE0Riq008547; Tue, 26 Aug 2003 07:00:27 -0700 (PDT) Resent-Date: Tue, 26 Aug 2003 07:00:27 -0700 (PDT) Resent-Message-Id: <200308261400.h7QE0Riq008547@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, Ulrich Spoerlein Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 25CE116A4C0 for ; Tue, 26 Aug 2003 06:57:59 -0700 (PDT) Received: from wrzx28.rz.uni-wuerzburg.de (wrzx28.rz.uni-wuerzburg.de [132.187.3.28]) by mx1.FreeBSD.org (Postfix) with ESMTP id 80DE143FE0 for ; Tue, 26 Aug 2003 06:57:54 -0700 (PDT) (envelope-from q@uni.de) Received: from wrzx34.rz.uni-wuerzburg.de (wrzx34.rz.uni-wuerzburg.de [132.187.3.34]) by wrzx28.rz.uni-wuerzburg.de (Postfix) with ESMTP id 16A1A1D8A for ; Tue, 26 Aug 2003 15:57:53 +0200 (CEST) Received: from virusscan (localhost [127.0.0.1]) by wrzx34.rz.uni-wuerzburg.de (Postfix) with ESMTP id E0130D62D for ; Tue, 26 Aug 2003 15:58:40 +0200 (CEST) Received: from wrzx28.rz.uni-wuerzburg.de (wrzx28.rz.uni-wuerzburg.de [132.187.3.28]) by wrzx34.rz.uni-wuerzburg.de (Postfix) with ESMTP id A4713D669 for ; Tue, 26 Aug 2003 15:58:40 +0200 (CEST) Received: from frodo.galgenberg.net (wwsx14.win-screen.uni-wuerzburg.de [132.187.253.14]) by mailmaster.uni-wuerzburg.de (Postfix) with SMTP id 968961D8A for ; Tue, 26 Aug 2003 15:57:52 +0200 (CEST) Received: (qmail 85328 invoked from network); 26 Aug 2003 13:57:52 -0000 Received: from gb-21-237.galgenberg.net (HELO coyote.local) (172.16.21.237) by frodo.galgenberg.net with SMTP; 26 Aug 2003 13:57:52 -0000 Received: from roadrunner.local (roadrunner [192.168.0.147]) by coyote.local (8.12.9/8.12.8) with ESMTP id h7QDvqlt020247 for ; Tue, 26 Aug 2003 15:57:52 +0200 (CEST) (envelope-from q@roadrunner.local) Received: from roadrunner.local (localhost [127.0.0.1]) by roadrunner.local (8.12.9/8.12.9) with ESMTP id h7QDvm5H004824 for ; Tue, 26 Aug 2003 15:57:48 +0200 (CEST) (envelope-from q@roadrunner.local) Received: (from q@localhost) by roadrunner.local (8.12.9/8.12.9/Submit) id h7QDvlG5004823; Tue, 26 Aug 2003 15:57:47 +0200 (CEST) Message-Id: <200308261357.h7QDvlG5004823@roadrunner.local> Date: Tue, 26 Aug 2003 15:57:47 +0200 (CEST) From: Ulrich Spoerlein To: FreeBSD-gnats-submit@FreeBSD.org X-Send-Pr-Version: 3.113 Subject: kern/55993: getcwd() breaks on unionfs mounted directories X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list Reply-To: Ulrich Spoerlein List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 26 Aug 2003 14:00:29 -0000 >Number: 55993 >Category: kern >Synopsis: getcwd() breaks on unionfs mounted directories >Confidential: no >Severity: serious >Priority: high >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Tue Aug 26 07:00:26 PDT 2003 >Closed-Date: >Last-Modified: >Originator: Ulrich Spoerlein >Release: FreeBSD 5.1-RELEASE i386 >Organization: >Environment: System: FreeBSD roadrunner 5.1-RELEASE FreeBSD 5.1-RELEASE #1: Mon Aug 11 15:27:16 CEST 2003 q@roadrunner:/usr/obj/usr/src/sys/ROADRUNNER i386 >Description: Inside a chroot, a simple 'pwd' will fail, if it is run on a unionfs mounted directory. truss shows the following: readlink("/etc/malloc.conf","aj",63) = 2 (0x2) issetugid() = 0 (0x0) getuid() = 0 (0x0) mmap(0x0,4096,0x3,0x1002,-1,0x0) = 671449088 (0x28058000) break(0x805c000) = 0 (0x0) break(0x805d000) = 0 (0x0) __getcwd(0x805c000,0x3fc) ERR#20 'Not a directory' stat("/",0xbfbff4e0) = 0 (0x0) lstat(".",0xbfbff4e0) = 0 (0x0) stat("..",0xbfbff400) = 0 (0x0) open("..",0x4,00) = 3 (0x3) fstat(3,0xbfbff400) = 0 (0x0) fcntl(0x3,0x2,0x1) = 0 (0x0) break(0x805e000) = 0 (0x0) __sysctl(0xbfbff2b0,0x2,0x8059084,0xbfbff2ac,0x0,0x0) = 0 (0x0) fstatfs(0x3,0xbfbff300) = 0 (0x0) break(0x805f000) = 0 (0x0) getdirentries(0x3,0x805e000,0x1000,0x805d014) = 512 (0x200) getdirentries(0x3,0x805e200,0xe00,0x805d014) = 512 (0x200) getdirentries(0x3,0x805e400,0xc00,0x805d014) = 0 (0x0) fstat(3,0xbfbff4e0) = 0 (0x0) lseek(3,0x200,0) = 512 (0x200) close(3) = 0 (0x0) lstat("../",0xbfbff4e0) = 0 (0x0) stat("../..",0xbfbff400) = 0 (0x0) open("../..",0x4,04) = 3 (0x3) fstat(3,0xbfbff400) = 0 (0x0) fcntl(0x3,0x2,0x1) = 0 (0x0) fstatfs(0x3,0xbfbff300) = 0 (0x0) fstat(3,0xbfbff4e0) = 0 (0x0) getdirentries(0x3,0x805e000,0x1000,0x805d014) = 512 (0x200) getdirentries(0x3,0x805e000,0x1000,0x805d014) = 0 (0x0) lseek(3,0x0,0) = 0 (0x0) close(3) = 0 (0x0) pwd: write(2,0xbfbfedd0,5) = 5 (0x5) .write(2,0xbfbfedf0,1) = 1 (0x1) : write(2,0x80568cc,2) = 2 (0x2) No such file or directory write(2,0xbfbfedd0,26) = 26 (0x1a) exit(0x1) process exit, rval = 256 This also renders 'make' in any port of choice unuseable. >How-To-Repeat: cd /usr/src && make world DESTDIR=/livefs mkdir -p /livefs/usr/ports && mount -t unionfs /usr/ports /livefs/usr/ports Doing a pwd in /livefs/usr/ports/editors/vim works just fine, however doing a 'make' fails. Running truss on both processes shows that both processes should fail to get getcwd(). I don't know why a simple pwd prints the correct directory, a 'truss pwd' does not. Now chroot to /livefs # chroot /livefs /bin/tcsh # cd /usr/ports/editors/vim && pwd pwd: .: No such file or directory So here pwd "correctly fails" to call getcwd() (It always returns ERR#20), make is broken too. >Fix: Please don't tell me that unionfs is buggy, I know that and I read the manpages. However I think that (when working) unionfs is a real cool tool and can obviously do more than an union-mount. I will try to get into debugging this, but my skills are severly limited with respect to that area :( >Release-Note: >Audit-Trail: >Unformatted: