svn commit: r188677 - in head/sys/fs: procfs pseudofs

Dag-Erling Smorgrav des at FreeBSD.org
Mon Feb 16 07:17:29 PST 2009


Author: des
Date: Mon Feb 16 15:17:26 2009
New Revision: 188677
URL: http://svn.freebsd.org/changeset/base/188677

Log:
  Fix a logic bug that caused the pfs_attr method to be called only for
  PFS_PROCDEP nodes.
  
  Submitted by:	Andrew Brampton <brampton at gmail.com>
  MFC after:	2 weeks

Modified:
  head/sys/fs/procfs/procfs.c
  head/sys/fs/pseudofs/pseudofs_vnops.c

Modified: head/sys/fs/procfs/procfs.c
==============================================================================
--- head/sys/fs/procfs/procfs.c	Mon Feb 16 15:10:51 2009	(r188676)
+++ head/sys/fs/procfs/procfs.c	Mon Feb 16 15:17:26 2009	(r188677)
@@ -99,7 +99,6 @@ procfs_docurproc(PFS_FILL_ARGS)
 int
 procfs_attr(PFS_ATTR_ARGS)
 {
-	PROC_LOCK_ASSERT(p, MA_OWNED);
 
 	/* XXX inefficient, split into separate functions */
 	if (strcmp(pn->pn_name, "ctl") == 0 ||
@@ -112,11 +111,12 @@ procfs_attr(PFS_ATTR_ARGS)
 	    strcmp(pn->pn_name, "fpregs") == 0)
 		vap->va_mode = 0600;
 
-	if ((p->p_flag & P_SUGID) && pn->pn_type != pfstype_procdir)
-		vap->va_mode = 0;
+	if (p != NULL) {
+		PROC_LOCK_ASSERT(p, MA_OWNED);
 
-	vap->va_uid = p->p_ucred->cr_uid;
-	vap->va_gid = p->p_ucred->cr_gid;
+		if ((p->p_flag & P_SUGID) && pn->pn_type != pfstype_procdir)
+			vap->va_mode = 0;
+	}
 
 	return (0);
 }

Modified: head/sys/fs/pseudofs/pseudofs_vnops.c
==============================================================================
--- head/sys/fs/pseudofs/pseudofs_vnops.c	Mon Feb 16 15:10:51 2009	(r188676)
+++ head/sys/fs/pseudofs/pseudofs_vnops.c	Mon Feb 16 15:17:26 2009	(r188677)
@@ -226,14 +226,17 @@ pfs_getattr(struct vop_getattr_args *va)
 	if (proc != NULL) {
 		vap->va_uid = proc->p_ucred->cr_ruid;
 		vap->va_gid = proc->p_ucred->cr_rgid;
-		if (pn->pn_attr != NULL)
-			error = pn_attr(curthread, proc, pn, vap);
-		PROC_UNLOCK(proc);
 	} else {
 		vap->va_uid = 0;
 		vap->va_gid = 0;
 	}
 
+	if (pn->pn_attr != NULL)
+		error = pn_attr(curthread, proc, pn, vap);
+
+	if(proc != NULL)
+		PROC_UNLOCK(proc);
+
 	PFS_RETURN (error);
 }
 


More information about the svn-src-head mailing list