Date: 4 Jan 2004 16:28:59 -0000 From: Colin Percival <cperciva@daemonology.net> To: FreeBSD-gnats-submit@FreeBSD.org Subject: kern/60897: devfs_rule_matchpath fails on directories Message-ID: <20040104162859.621.qmail@fafnir.daemonology.net> Resent-Message-ID: <200401041630.i04GUGlU074775@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 60897 >Category: kern >Synopsis: devfs_rule_matchpath fails on 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: Sun Jan 04 08:30:15 PST 2004 >Closed-Date: >Last-Modified: >Originator: Colin Percival >Release: FreeBSD 5.2-RC i386 >Organization: >Environment: System: FreeBSD fafnir.daemonology.net 5.2-RC FreeBSD 5.2-RC #3: Sun Jan 4 16:13:57 GMT 2004 cperciva@fafnir.daemonology.net:/usr/obj/usr/src/sys/GENERIC i386 >Description: devfs_rule_matchpath(dk,de) always returns 0 if de is a directory. In particular, this means that /dev/fd/ cannot be unhidden by specifying "path fd unhide". This causes problems for any jailed processes which want to use /dev/stdout (for example, buildkernel!) >How-To-Repeat: fafnir# mount -t devfs devfs /tmp/dev fafnir# devfs rule -s 10 delset fafnir# devfs rule -s 10 add hide fafnir# devfs rule -s 10 add path fd unhide fafnir# devfs -m /tmp/dev ruleset 10 fafnir# devfs -m /tmp/dev rule applyset fafnir# ls -l /tmp/dev/ [nothing listed] >Fix: --- devfs_rule.diff begins here --- Index: devfs_rule.c =================================================================== RCS file: /usr/local/freebsd-update-server/cvs/src/sys/fs/devfs/devfs_rule.c,v retrieving revision 1.8 diff -u -r1.8 devfs_rule.c --- devfs_rule.c 19 Feb 2003 05:47:17 -0000 1.8 +++ devfs_rule.c 4 Jan 2004 16:09:00 -0000 @@ -633,7 +633,8 @@ dev = devfs_rule_getdev(de); if (dev != NULL) pname = dev->si_name; - else if (de->de_dirent->d_type == DT_LNK) + else if (de->de_dirent->d_type == DT_LNK || + de->de_dirent->d_type == DT_DIR) pname = de->de_dirent->d_name; else return (0); --- devfs_rule.diff ends here --- >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040104162859.621.qmail>