summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDag-Erling Smørgrav <des@FreeBSD.org>2009-02-16 15:17:26 +0000
committerDag-Erling Smørgrav <des@FreeBSD.org>2009-02-16 15:17:26 +0000
commit655fcdaa00b26f724477b88f7e5dbae276d4778a (patch)
treeedd135c1c224ccb077e90eca1774a7cc9ceb5f4a
parentd8d42f3f4ea517542f276f595304cd0ec4162e55 (diff)
Notes
-rw-r--r--sys/fs/procfs/procfs.c10
-rw-r--r--sys/fs/pseudofs/pseudofs_vnops.c9
2 files changed, 11 insertions, 8 deletions
diff --git a/sys/fs/procfs/procfs.c b/sys/fs/procfs/procfs.c
index 26bd18532f8e..77d1dc62ca4a 100644
--- a/sys/fs/procfs/procfs.c
+++ b/sys/fs/procfs/procfs.c
@@ -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);
}
diff --git a/sys/fs/pseudofs/pseudofs_vnops.c b/sys/fs/pseudofs/pseudofs_vnops.c
index c5c14b13e7fe..be86f4e0b131 100644
--- a/sys/fs/pseudofs/pseudofs_vnops.c
+++ b/sys/fs/pseudofs/pseudofs_vnops.c
@@ -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);
}