summaryrefslogtreecommitdiffstats
path: root/sys/kern/sys_process.c
diff options
context:
space:
mode:
authormpi <mpi@openbsd.org>2019-11-29 12:43:14 +0000
committermpi <mpi@openbsd.org>2019-11-29 12:43:14 +0000
commit6ea2c94dc5510d2446ba66c46e5eb0552f8fc1c5 (patch)
treeb466c061d465ce38047152ef27abf1744ade35c5 /sys/kern/sys_process.c
parentUse RW_PROC() consistently. (diff)
downloadwireguard-openbsd-6ea2c94dc5510d2446ba66c46e5eb0552f8fc1c5.tar.xz
wireguard-openbsd-6ea2c94dc5510d2446ba66c46e5eb0552f8fc1c5.zip
Return EBUSY for successive PT_TRACE_ME calls.
Match FreeBSD and NetBSD. ok bluhm@, deraadt@, kettenis@
Diffstat (limited to 'sys/kern/sys_process.c')
-rw-r--r--sys/kern/sys_process.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/sys/kern/sys_process.c b/sys/kern/sys_process.c
index 08bfb73bf5f..94837afeeca 100644
--- a/sys/kern/sys_process.c
+++ b/sys/kern/sys_process.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: sys_process.c,v 1.80 2018/02/19 09:25:13 mpi Exp $ */
+/* $OpenBSD: sys_process.c,v 1.81 2019/11/29 12:43:14 mpi Exp $ */
/* $NetBSD: sys_process.c,v 1.55 1996/05/15 06:17:47 tls Exp $ */
/*-
@@ -282,6 +282,8 @@ ptrace_ctrl(struct proc *p, int req, pid_t pid, caddr_t addr, int data)
case PT_TRACE_ME:
/* Just set the trace flag. */
tr = p->p_p;
+ if (ISSET(tr->ps_flags, PS_TRACED))
+ return EBUSY;
atomic_setbits_int(&tr->ps_flags, PS_TRACED);
tr->ps_oppid = tr->ps_pptr->ps_pid;
if (tr->ps_ptstat == NULL)