summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_prot.c
diff options
context:
space:
mode:
authorderaadt <deraadt@openbsd.org>2008-10-31 17:17:00 +0000
committerderaadt <deraadt@openbsd.org>2008-10-31 17:17:00 +0000
commit26220b84d206a04fadccb03b4c9af627ff483e2c (patch)
tree5e3e71b6d6644bb959ec618329156cb1dc6b96a8 /sys/kern/kern_prot.c
parentkern_sysctl.c (diff)
downloadwireguard-openbsd-26220b84d206a04fadccb03b4c9af627ff483e2c.tar.xz
wireguard-openbsd-26220b84d206a04fadccb03b4c9af627ff483e2c.zip
accidental commit ... backout
Diffstat (limited to 'sys/kern/kern_prot.c')
-rw-r--r--sys/kern/kern_prot.c54
1 files changed, 15 insertions, 39 deletions
diff --git a/sys/kern/kern_prot.c b/sys/kern/kern_prot.c
index fa3f48bcb6d..7379a924540 100644
--- a/sys/kern/kern_prot.c
+++ b/sys/kern/kern_prot.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kern_prot.c,v 1.35 2008/10/31 17:15:30 deraadt Exp $ */
+/* $OpenBSD: kern_prot.c,v 1.36 2008/10/31 17:17:04 deraadt Exp $ */
/* $NetBSD: kern_prot.c,v 1.33 1996/02/09 18:59:42 christos Exp $ */
/*
@@ -234,18 +234,10 @@ int
sys_setsid(struct proc *p, void *v, register_t *retval)
{
- struct session *nsess;
- struct pgrp *npgrp;
-
- nsess = pool_get(&session_pool, PR_WAITOK);
- npgrp = pool_get(&pgrp_pool, PR_WAITOK);
-
if (p->p_pgid == p->p_pid || pgfind(p->p_pid)) {
- pool_put(&pgrp_pool, npgrp);
- pool_put(&session_pool, nsess);
return (EPERM);
} else {
- (void) enterpgrp(p, p->p_pid, npgrp, nsess);
+ (void)enterpgrp(p, p->p_pid, 1);
*retval = p->p_pid;
return (0);
}
@@ -273,9 +265,9 @@ sys_setpgid(struct proc *curp, void *v, register_t *retval)
syscallarg(int) pgid;
} */ *uap = v;
struct proc *targp; /* target process */
- struct pgrp *pgrp, *npgrp; /* target pgrp */
+ struct pgrp *pgrp; /* target pgrp */
pid_t pid;
- int pgid, error;
+ int pgid;
pid = SCARG(uap, pid);
pgid = SCARG(uap, pgid);
@@ -283,40 +275,24 @@ sys_setpgid(struct proc *curp, void *v, register_t *retval)
if (pgid < 0)
return (EINVAL);
- npgrp = pool_get(&pgrp_pool, PR_WAITOK);
-
if (pid != 0 && pid != curp->p_pid) {
- if ((targp = pfind(pid)) == 0 || !inferior(targp)) {
- error = ESRCH;
- goto out;
- }
- if (targp->p_session != curp->p_session) {
- error = EPERM;
- goto out;
- }
- if (targp->p_flag & P_EXEC) {
- error = EACCES;
- goto out;
- }
+ if ((targp = pfind(pid)) == 0 || !inferior(targp))
+ return (ESRCH);
+ if (targp->p_session != curp->p_session)
+ return (EPERM);
+ if (targp->p_flag & P_EXEC)
+ return (EACCES);
} else
targp = curp;
- if (SESS_LEADER(targp)) {
- error = EPERM;
- goto out;
- }
+ if (SESS_LEADER(targp))
+ return (EPERM);
if (pgid == 0)
pgid = targp->p_pid;
else if (pgid != targp->p_pid)
if ((pgrp = pgfind(pgid)) == 0 ||
- pgrp->pg_session != curp->p_session) {
- error = EPERM;
- goto out;
- }
- return (enterpgrp(targp, pgid, npgrp, NULL));
-out:
- if (npgrp)
- pool_put(&pgrp_pool, npgrp);
- return (error);
+ pgrp->pg_session != curp->p_session)
+ return (EPERM);
+ return (enterpgrp(targp, pgid, 0));
}
/* ARGSUSED */