summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorTheo de Raadt <deraadt@cvs.openbsd.org>2015-06-05 16:59:11 +0000
committerTheo de Raadt <deraadt@cvs.openbsd.org>2015-06-05 16:59:11 +0000
commitc2fe1f2e4620c0d2ab54b6b04130037c5b071b53 (patch)
treec8afb1c022f03885ca9d1c47496a13643929b463 /sys
parent12c07850b3844baf900ab62a3d99250851af5e2b (diff)
Do not unconditionally clear pcb_onfault after a uvm_fault. That will
permit the active copyout/copyin to continue work on subsequent faulting pages and not misinterpret & fault them as kernel bcopy against userland addresses. Old bug -- fall of 1996. This should fix getentropy issues on MP systems which have become more apparent recently, probably due to some combo of increased ASLR with unlocked getentropy happening very soon after vfork/fork... ok miod
Diffstat (limited to 'sys')
-rw-r--r--sys/arch/alpha/alpha/trap.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/sys/arch/alpha/alpha/trap.c b/sys/arch/alpha/alpha/trap.c
index 3efaeba90f4..fd8423d3d74 100644
--- a/sys/arch/alpha/alpha/trap.c
+++ b/sys/arch/alpha/alpha/trap.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: trap.c,v 1.78 2015/06/05 16:45:24 deraadt Exp $ */
+/* $OpenBSD: trap.c,v 1.79 2015/06/05 16:59:10 deraadt Exp $ */
/* $NetBSD: trap.c,v 1.52 2000/05/24 16:48:33 thorpej Exp $ */
/*-
@@ -448,7 +448,6 @@ do_fault:
if (p->p_addr->u_pcb.pcb_onfault != 0) {
framep->tf_regs[FRAME_PC] =
p->p_addr->u_pcb.pcb_onfault;
- p->p_addr->u_pcb.pcb_onfault = 0;
KERNEL_UNLOCK();
goto out;
}