mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-02 14:44:58 +00:00
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:
parent
d8d42f3f4e
commit
655fcdaa00
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=188677
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue