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