summaryrefslogtreecommitdiff
path: root/sys/arch/alpha
diff options
context:
space:
mode:
authorPhilip Guenthe <guenther@cvs.openbsd.org>2011-04-03 14:56:29 +0000
committerPhilip Guenthe <guenther@cvs.openbsd.org>2011-04-03 14:56:29 +0000
commit445a93dfa951cfdb8d9253fd13836d6a25a4ac4b (patch)
tree9248ed7a9eb63023a13f069c04bd049ee460f416 /sys/arch/alpha
parente3f9e42db6dd7e48f8bd5a3da7d5b2bb44f3752f (diff)
Move PPWAIT flag from struct proc to process, so that rthreads in
a vforked child behave correctly. Have the parent in a vfork() wait on a (different) flag in *its* process instead of the child to prevent a possible use-after-free. When ktracing the child return from a fork, call it rfork if an rthread was created. ok blambert@
Diffstat (limited to 'sys/arch/alpha')
-rw-r--r--sys/arch/alpha/alpha/trap.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/sys/arch/alpha/alpha/trap.c b/sys/arch/alpha/alpha/trap.c
index 52a6e93dfeb..5896a1379e0 100644
--- a/sys/arch/alpha/alpha/trap.c
+++ b/sys/arch/alpha/alpha/trap.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: trap.c,v 1.57 2010/10/27 20:20:38 miod Exp $ */
+/* $OpenBSD: trap.c,v 1.58 2011/04/03 14:56:27 guenther Exp $ */
/* $NetBSD: trap.c,v 1.52 2000/05/24 16:48:33 thorpej Exp $ */
/*-
@@ -680,7 +680,9 @@ child_return(arg)
#ifdef KTRACE
if (KTRPOINT(p, KTR_SYSRET))
ktrsysret(p,
- (p->p_flag & P_PPWAIT) ? SYS_vfork : SYS_fork, 0, 0);
+ (p->p_flag & P_THREAD) ? SYS_rfork :
+ (p->p_p->ps_flags & PS_PPWAIT) ? SYS_vfork : SYS_fork,
+ 0, 0);
#endif
}