diff options
author | 2014-12-12 03:04:11 +0000 | |
---|---|---|
committer | 2014-12-12 03:04:11 +0000 | |
commit | cc61a3882df09fc590f28b70a782d9324b50096b (patch) | |
tree | 2a23b5d719cf68a83d006b9f15f504b63f75dcb9 | |
parent | Xr getdtablecount (diff) | |
download | wireguard-openbsd-cc61a3882df09fc590f28b70a782d9324b50096b.tar.xz wireguard-openbsd-cc61a3882df09fc590f28b70a782d9324b50096b.zip |
sysctl_proc_vmmap(): Allow retrieving "self" VM mapping without privilege.
Previous version OK'ed by tedu@ deraadt@
-rw-r--r-- | sys/kern/kern_sysctl.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/sys/kern/kern_sysctl.c b/sys/kern/kern_sysctl.c index d6d0946ee96..09add5a292f 100644 --- a/sys/kern/kern_sysctl.c +++ b/sys/kern/kern_sysctl.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kern_sysctl.c,v 1.275 2014/12/10 02:44:47 tedu Exp $ */ +/* $OpenBSD: kern_sysctl.c,v 1.276 2014/12/12 03:04:11 uebayasi Exp $ */ /* $NetBSD: kern_sysctl.c,v 1.17 1996/05/20 17:49:05 mrg Exp $ */ /*- @@ -1876,12 +1876,10 @@ sysctl_proc_vmmap(int *name, u_int namelen, void *oldp, size_t *oldlenp, } pid = name[0]; - if (pid > 0) { -#if 1 - /* XXX Allow only root for now */ - if ((error = suser(cp, 0)) != 0) - return (error); -#endif + if (pid == cp->p_pid) { + /* Self process mapping. */ + findpr = cp->p_p; + } else if (pid > 0) { if ((findpr = prfind(pid)) == NULL) return (ESRCH); @@ -1889,10 +1887,16 @@ sysctl_proc_vmmap(int *name, u_int namelen, void *oldp, size_t *oldlenp, if (findpr->ps_flags & (PS_SYSTEM | PS_EXITING)) return (EINVAL); +#if 1 + /* XXX Allow only root for now */ + if ((error = suser(cp, 0)) != 0) + return (error); +#else /* Only owner or root can get vmmap */ if (findpr->ps_ucred->cr_uid != cp->p_ucred->cr_uid && (error = suser(cp, 0)) != 0) return (error); +#endif } else { /* Only root can get kernel_map */ if ((error = suser(cp, 0)) != 0) |