From owner-freebsd-bugs@FreeBSD.ORG Sun Jun 22 03:10:04 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 7EE611065674 for ; Sun, 22 Jun 2008 03:10:04 +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 7DE518FC1B for ; Sun, 22 Jun 2008 03:10:04 +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 m5M3A4N4007721 for ; Sun, 22 Jun 2008 03:10:04 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.2/8.14.1/Submit) id m5M3A4KJ007718; Sun, 22 Jun 2008 03:10:04 GMT (envelope-from gnats) Date: Sun, 22 Jun 2008 03:10:04 GMT Message-Id: <200806220310.m5M3A4KJ007718@freefall.freebsd.org> To: freebsd-bugs@FreeBSD.org From: Giorgos Keramidas Cc: Subject: Re: bin/124409: fsck(8) requires exact entry for mountpoints when executing / bug by design in getfsfile(3) in .../lib/libc/gen/fstab.c X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Giorgos Keramidas List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 22 Jun 2008 03:10:04 -0000 The following reply was made to PR bin/124409; it has been noted by GNATS. From: Giorgos Keramidas To: "Garrett Cooper" Cc: bug-followup@freebsd.org Subject: Re: bin/124409: fsck(8) requires exact entry for mountpoints when executing / bug by design in getfsfile(3) in .../lib/libc/gen/fstab.c Date: Sun, 22 Jun 2008 06:07:37 +0300 On Mon, 16 Jun 2008 20:28:08 -0700, "Garrett Cooper" wrote: > On Tue, Jun 10, 2008 at 2:27 AM, Garrett Cooper wrote: >> Ok.... it appears I wasn't intelligent enough to post this in the right >> place last night. Comments please? >> >> Hi hackers, >> >> I have a question, pending a bug found in getfsfile(3) [1]. >> >> Is there any possibility where a mountpoint be any value other >> >> than a directory, a symlink, or "none", i.e. a flat file? >> >> Thanks, >> >> -Garrett >> >> References: >> >> http://www.freebsd.org/cgi/query-pr.cgi?pr=bin/124409 (not fully in PR >> >> database yet). > > Going once, going twice... Hi Garrett :-) When I wrote the original comment in that PR I had something like this in mind: %%% *** src.7789d2851415/lib/libc/gen/fstab.c Sun Jun 22 05:57:09 2008 --- /home/build/src/lib/libc/gen/fstab.c Sun Jun 22 05:56:48 2008 *************** struct fstab * *** 236,245 **** getfsfile(name) const char *name; { if (setfsent()) ! while (fstabscan()) ! if (!strcmp(_fs_fstab.fs_file, name)) return(&_fs_fstab); return((struct fstab *)NULL); } --- 236,256 ---- getfsfile(name) const char *name; { + char name_path[PATH_MAX]; + char fstab_path[PATH_MAX]; + + if (realpath(name, name_path) == NULL) + return((struct fstab *)NULL); if (setfsent()) ! while (fstabscan()) { ! if (strcmp(_fs_fstab.fs_file, name) == 0 || ! strcmp(_fs_fstab.fs_file, name_path) == 0) ! return(&_fs_fstab); ! if (realpath(_fs_fstab.fs_file, fstab_path) == NULL) ! return((struct fstab *)NULL); ! if (strcmp(fstab_path, name_path) == 0) return(&_fs_fstab); + } return((struct fstab *)NULL); } %%% I tried to avoid unnecessary realpath(3) calls as much as possible, but there is still the possibility for at least N+1 calls, where N is the number of entries in fstab... Can you test the above patch, and let me know if it looks ok, if you have a better fix in the works, etc.? It seems to pass the bug you originally reported when I run: % env LD_PRELOAD=/home/build/obj/home/build/src/lib/libc/libc.so.7 \ fsck ///cdrom/// fsck: exec fsck_cd9660 for /dev/acd0 in /sbin:/usr/sbin: No such file or directory The failure later is ok, because we don't have fsck_cd9660 for CD-ROMs.