diff options
-rw-r--r-- | sys/fs/procfs/procfs.c | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/sys/fs/procfs/procfs.c b/sys/fs/procfs/procfs.c index 7f93414..90d8975 100644 --- a/sys/fs/procfs/procfs.c +++ b/sys/fs/procfs/procfs.c @@ -98,12 +98,7 @@ procfs_attr(PFS_ATTR_ARGS) PROC_LOCK_ASSERT(p, MA_OWNED); /* XXX inefficient, split into separate functions */ - if (p->p_flag & P_SUGID) { - if (pn->pn_type == pfstype_procdir) - vap->va_mode = 0555; - else - vap->va_mode = 0; - } else if (strcmp(pn->pn_name, "ctl") == 0 || + if (strcmp(pn->pn_name, "ctl") == 0 || strcmp(pn->pn_name, "note") == 0 || strcmp(pn->pn_name, "notepg") == 0) vap->va_mode = 0200; @@ -113,6 +108,9 @@ 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; + vap->va_uid = p->p_ucred->cr_uid; vap->va_gid = p->p_ucred->cr_gid; |