Fix a logic bug that caused the pfs_attr method to be called only for

PFS_PROCDEP nodes.

Submitted by:	Andrew Brampton <brampton@gmail.com>
MFC after:	2 weeks
This commit is contained in:
Dag-Erling Smørgrav 2009-02-16 15:17:26 +00:00
parent d8d42f3f4e
commit 655fcdaa00
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=188677
2 changed files with 11 additions and 8 deletions

View file

@ -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);
}

View file

@ -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);
}