From cperciva@fafnir.daemonology.net  Sun Jan  4 08:28:58 2004
Return-Path: <cperciva@fafnir.daemonology.net>
Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125])
	by hub.freebsd.org (Postfix) with ESMTP id 3B22016A4CE
	for <FreeBSD-gnats-submit@freebsd.org>; Sun,  4 Jan 2004 08:28:58 -0800 (PST)
Received: from fafnir.daemonology.net (h24-87-233-42.vc.shawcable.net [24.87.233.42])
	by mx1.FreeBSD.org (Postfix) with SMTP id A883943D58
	for <FreeBSD-gnats-submit@freebsd.org>; Sun,  4 Jan 2004 08:28:55 -0800 (PST)
	(envelope-from cperciva@fafnir.daemonology.net)
Received: (qmail 622 invoked by uid 0); 4 Jan 2004 16:28:59 -0000
Message-Id: <20040104162859.621.qmail@fafnir.daemonology.net>
Date: 4 Jan 2004 16:28:59 -0000
From: Colin Percival <cperciva@daemonology.net>
Reply-To: Colin Percival <cperciva@daemonology.net>
To: FreeBSD-gnats-submit@freebsd.org
Cc:
Subject: devfs_rule_matchpath fails on directories
X-Send-Pr-Version: 3.113
X-GNATS-Notify:

>Number:         60897
>Category:       kern
>Synopsis:       devfs_rule_matchpath fails on directories
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    freebsd-bugs
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sun Jan 04 08:30:15 PST 2004
>Closed-Date:    Wed Jan 21 08:50:46 PST 2004
>Last-Modified:  Wed Jan 21 08:50:46 PST 2004
>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:
State-Changed-From-To: open->closed 
State-Changed-By: cperciva 
State-Changed-When: Wed Jan 21 08:50:24 PST 2004 
State-Changed-Why:  
Close my PR, patch committed. 


http://www.freebsd.org/cgi/query-pr.cgi?pr=60897 
>Unformatted:
