kern/60897: devfs_rule_matchpath fails on directories
Colin Percival
cperciva at daemonology.net
Sun Jan 4 08:30:18 PST 2004
>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 at 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:
More information about the freebsd-bugs
mailing list