From nobody@FreeBSD.org  Fri Jun 27 00:11:17 2008
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 314501065682
	for <freebsd-gnats-submit@FreeBSD.org>; Fri, 27 Jun 2008 00:11:17 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (www.freebsd.org [IPv6:2001:4f8:fff6::21])
	by mx1.freebsd.org (Postfix) with ESMTP id 214A28FC2E
	for <freebsd-gnats-submit@FreeBSD.org>; Fri, 27 Jun 2008 00:11:17 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (localhost [127.0.0.1])
	by www.freebsd.org (8.14.2/8.14.2) with ESMTP id m5R0BG67096566
	for <freebsd-gnats-submit@FreeBSD.org>; Fri, 27 Jun 2008 00:11:16 GMT
	(envelope-from nobody@www.freebsd.org)
Received: (from nobody@localhost)
	by www.freebsd.org (8.14.2/8.14.1/Submit) id m5R0BGEe096564;
	Fri, 27 Jun 2008 00:11:16 GMT
	(envelope-from nobody)
Message-Id: <200806270011.m5R0BGEe096564@www.freebsd.org>
Date: Fri, 27 Jun 2008 00:11:16 GMT
From: Mateusz Guzik <mjguzik@gmail.com>
To: freebsd-gnats-submit@FreeBSD.org
Subject: [devfs][patch] devfs does not apply rules to newly created directories
X-Send-Pr-Version: www-3.1
X-GNATS-Notify:

>Number:         125034
>Category:       kern
>Synopsis:       [devfs] [patch] devfs does not apply rules to newly created directories
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    jh
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Fri Jun 27 00:20:01 UTC 2008
>Closed-Date:    Thu May 26 16:05:46 UTC 2011
>Last-Modified:  Thu May 26 16:05:46 UTC 2011
>Originator:     Mateusz Guzik
>Release:        8.0-CURRENT
>Organization:
>Environment:
FreeBSD eternal 8.0-CURRENT FreeBSD 8.0-CURRENT #38: Fri Jun 27 01:55:48 CEST 2008     root@eternal:/usr/obj/usr/src/sys/ETERNAL  i386

>Description:
devfs does not apply rules to newly created directories.
>How-To-Repeat:
# devfs ruleset 10
# devfs rule add path label hide
# devfs rule applyset
# mdconfig -f /tmp/foo
md0
# glabel create foo md0
# ls /dev/label
foo
# devfs rule applyset
# ls /dev/label      
ls: /dev/label: No such file or directory
>Fix:
Patch is attached.

Patch attached with submission follows:

--- sys/fs/devfs/devfs_devs.c.orig	2008-06-27 02:05:34.000000000 +0200
+++ sys/fs/devfs/devfs_devs.c	2008-06-27 02:05:51.119241000 +0200
@@ -422,12 +422,15 @@
 			for (q = s; *q != '/' && *q != '\0'; q++)
 				continue;
 			if (*q != '/')
 				break;
 			de = devfs_find(dd, s, q - s);
-			if (de == NULL)
+			if (de == NULL) {
 				de = devfs_vmkdir(dm, s, q - s, dd, 0);
+				devfs_rules_apply(dm, de);
+			}
+
 			s = q + 1;
 			dd = de;
 		}
 
 		de = devfs_newdirent(s, q - s);


>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-bugs->jh 
Responsible-Changed-By: jh 
Responsible-Changed-When: Sun Dec 12 13:42:37 UTC 2010 
Responsible-Changed-Why:  
Take. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=125034 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/125034: commit references a PR
Date: Wed, 15 Dec 2010 16:42:51 +0000 (UTC)

 Author: jh
 Date: Wed Dec 15 16:42:44 2010
 New Revision: 216461
 URL: http://svn.freebsd.org/changeset/base/216461
 
 Log:
   - Assert that dm_lock is exclusively held in devfs_rules_apply() and
     in devfs_vmkdir() while adding the entry to de_list of the parent.
   - Apply devfs rules to newly created directories and symbolic links.
   
   PR:		kern/125034
   Submitted by:	Mateusz Guzik (original version)
 
 Modified:
   head/sys/fs/devfs/devfs_devs.c
   head/sys/fs/devfs/devfs_rule.c
   head/sys/fs/devfs/devfs_vnops.c
 
 Modified: head/sys/fs/devfs/devfs_devs.c
 ==============================================================================
 --- head/sys/fs/devfs/devfs_devs.c	Wed Dec 15 16:21:59 2010	(r216460)
 +++ head/sys/fs/devfs/devfs_devs.c	Wed Dec 15 16:42:44 2010	(r216461)
 @@ -281,8 +281,10 @@ devfs_vmkdir(struct devfs_mount *dmp, ch
  		de->de_dir = dd;
  	} else {
  		de->de_dir = dotdot;
 +		sx_assert(&dmp->dm_lock, SX_XLOCKED);
  		TAILQ_INSERT_TAIL(&dotdot->de_dlist, dd, de_list);
  		dotdot->de_links++;
 +		devfs_rules_apply(dmp, dd);
  	}
  
  #ifdef MAC
 
 Modified: head/sys/fs/devfs/devfs_rule.c
 ==============================================================================
 --- head/sys/fs/devfs/devfs_rule.c	Wed Dec 15 16:21:59 2010	(r216460)
 +++ head/sys/fs/devfs/devfs_rule.c	Wed Dec 15 16:42:44 2010	(r216461)
 @@ -139,6 +139,8 @@ devfs_rules_apply(struct devfs_mount *dm
  {
  	struct devfs_ruleset *ds;
  
 +	sx_assert(&dm->dm_lock, SX_XLOCKED);
 +
  	if (dm->dm_ruleset == 0)
  		return;
  	sx_slock(&sx_rules);
 
 Modified: head/sys/fs/devfs/devfs_vnops.c
 ==============================================================================
 --- head/sys/fs/devfs/devfs_vnops.c	Wed Dec 15 16:21:59 2010	(r216460)
 +++ head/sys/fs/devfs/devfs_vnops.c	Wed Dec 15 16:42:44 2010	(r216461)
 @@ -1589,6 +1589,7 @@ devfs_symlink(struct vop_symlink_args *a
  	de_dotdot = TAILQ_NEXT(de_dotdot, de_list);	/* ".." */
  	TAILQ_INSERT_AFTER(&dd->de_dlist, de_dotdot, de, de_list);
  	devfs_dir_ref_de(dmp, dd);
 +	devfs_rules_apply(dmp, de);
  
  	return (devfs_allocv(de, ap->a_dvp->v_mount, LK_EXCLUSIVE, ap->a_vpp));
  }
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 
State-Changed-From-To: open->patched 
State-Changed-By: jh 
State-Changed-When: Wed Dec 15 18:02:09 UTC 2010 
State-Changed-Why:  
Patched in head (r216461). Thanks! 

http://www.freebsd.org/cgi/query-pr.cgi?pr=125034 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/125034: commit references a PR
Date: Mon,  2 May 2011 13:58:55 +0000 (UTC)

 Author: jh
 Date: Mon May  2 13:58:40 2011
 New Revision: 221323
 URL: http://svn.freebsd.org/changeset/base/221323
 
 Log:
   MFC r216461:
   
   - Assert that dm_lock is exclusively held in devfs_rules_apply() and
     in devfs_vmkdir() while adding the entry to de_list of the parent.
   - Apply devfs rules to newly created directories and symbolic links.
   
   PR:		kern/125034
 
 Modified:
   stable/8/sys/fs/devfs/devfs_devs.c
   stable/8/sys/fs/devfs/devfs_rule.c
   stable/8/sys/fs/devfs/devfs_vnops.c
 Directory Properties:
   stable/8/sys/   (props changed)
   stable/8/sys/amd64/include/xen/   (props changed)
   stable/8/sys/cddl/contrib/opensolaris/   (props changed)
   stable/8/sys/contrib/dev/acpica/   (props changed)
   stable/8/sys/contrib/pf/   (props changed)
 
 Modified: stable/8/sys/fs/devfs/devfs_devs.c
 ==============================================================================
 --- stable/8/sys/fs/devfs/devfs_devs.c	Mon May  2 13:56:47 2011	(r221322)
 +++ stable/8/sys/fs/devfs/devfs_devs.c	Mon May  2 13:58:40 2011	(r221323)
 @@ -248,8 +248,10 @@ devfs_vmkdir(struct devfs_mount *dmp, ch
  		de->de_dir = dd;
  	} else {
  		de->de_dir = dotdot;
 +		sx_assert(&dmp->dm_lock, SX_XLOCKED);
  		TAILQ_INSERT_TAIL(&dotdot->de_dlist, dd, de_list);
  		dotdot->de_links++;
 +		devfs_rules_apply(dmp, dd);
  	}
  
  #ifdef MAC
 
 Modified: stable/8/sys/fs/devfs/devfs_rule.c
 ==============================================================================
 --- stable/8/sys/fs/devfs/devfs_rule.c	Mon May  2 13:56:47 2011	(r221322)
 +++ stable/8/sys/fs/devfs/devfs_rule.c	Mon May  2 13:58:40 2011	(r221323)
 @@ -139,6 +139,8 @@ devfs_rules_apply(struct devfs_mount *dm
  {
  	struct devfs_ruleset *ds;
  
 +	sx_assert(&dm->dm_lock, SX_XLOCKED);
 +
  	if (dm->dm_ruleset == 0)
  		return;
  	sx_slock(&sx_rules);
 
 Modified: stable/8/sys/fs/devfs/devfs_vnops.c
 ==============================================================================
 --- stable/8/sys/fs/devfs/devfs_vnops.c	Mon May  2 13:56:47 2011	(r221322)
 +++ stable/8/sys/fs/devfs/devfs_vnops.c	Mon May  2 13:58:40 2011	(r221323)
 @@ -1493,6 +1493,7 @@ devfs_symlink(struct vop_symlink_args *a
  	mac_devfs_create_symlink(ap->a_cnp->cn_cred, dmp->dm_mount, dd, de);
  #endif
  	TAILQ_INSERT_TAIL(&dd->de_dlist, de, de_list);
 +	devfs_rules_apply(dmp, de);
  	return (devfs_allocv(de, ap->a_dvp->v_mount, LK_EXCLUSIVE, ap->a_vpp));
  }
  
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/125034: commit references a PR
Date: Thu, 26 May 2011 15:38:20 +0000 (UTC)

 Author: jh
 Date: Thu May 26 15:38:11 2011
 New Revision: 222311
 URL: http://svn.freebsd.org/changeset/base/222311
 
 Log:
   MFC r216461:
   
   - Assert that dm_lock is exclusively held in devfs_rules_apply() and
     in devfs_vmkdir() while adding the entry to de_list of the parent.
   - Apply devfs rules to newly created directories and symbolic links.
   
   PR:		kern/125034
 
 Modified:
   stable/7/sys/fs/devfs/devfs_devs.c
   stable/7/sys/fs/devfs/devfs_rule.c
   stable/7/sys/fs/devfs/devfs_vnops.c
 Directory Properties:
   stable/7/sys/   (props changed)
   stable/7/sys/cddl/contrib/opensolaris/   (props changed)
   stable/7/sys/contrib/dev/acpica/   (props changed)
   stable/7/sys/contrib/pf/   (props changed)
 
 Modified: stable/7/sys/fs/devfs/devfs_devs.c
 ==============================================================================
 --- stable/7/sys/fs/devfs/devfs_devs.c	Thu May 26 15:01:37 2011	(r222310)
 +++ stable/7/sys/fs/devfs/devfs_devs.c	Thu May 26 15:38:11 2011	(r222311)
 @@ -222,8 +222,10 @@ devfs_vmkdir(struct devfs_mount *dmp, ch
  		de->de_dir = dd;
  	} else {
  		de->de_dir = dotdot;
 +		sx_assert(&dmp->dm_lock, SX_XLOCKED);
  		TAILQ_INSERT_TAIL(&dotdot->de_dlist, dd, de_list);
  		dotdot->de_links++;
 +		devfs_rules_apply(dmp, dd);
  	}
  
  #ifdef MAC
 
 Modified: stable/7/sys/fs/devfs/devfs_rule.c
 ==============================================================================
 --- stable/7/sys/fs/devfs/devfs_rule.c	Thu May 26 15:01:37 2011	(r222310)
 +++ stable/7/sys/fs/devfs/devfs_rule.c	Thu May 26 15:38:11 2011	(r222311)
 @@ -139,6 +139,8 @@ devfs_rules_apply(struct devfs_mount *dm
  {
  	struct devfs_ruleset *ds;
  
 +	sx_assert(&dm->dm_lock, SX_XLOCKED);
 +
  	if (dm->dm_ruleset == 0)
  		return;
  	sx_slock(&sx_rules);
 
 Modified: stable/7/sys/fs/devfs/devfs_vnops.c
 ==============================================================================
 --- stable/7/sys/fs/devfs/devfs_vnops.c	Thu May 26 15:01:37 2011	(r222310)
 +++ stable/7/sys/fs/devfs/devfs_vnops.c	Thu May 26 15:38:11 2011	(r222311)
 @@ -1418,6 +1418,7 @@ devfs_symlink(struct vop_symlink_args *a
  	mac_create_devfs_symlink(ap->a_cnp->cn_cred, dmp->dm_mount, dd, de);
  #endif
  	TAILQ_INSERT_TAIL(&dd->de_dlist, de, de_list);
 +	devfs_rules_apply(dmp, de);
  	return (devfs_allocv(de, ap->a_dvp->v_mount, ap->a_vpp, td));
  }
  
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 
State-Changed-From-To: patched->closed 
State-Changed-By: jh 
State-Changed-When: Thu May 26 16:05:45 UTC 2011 
State-Changed-Why:  
Fixed in head, stable/8 and stable/7. 

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