From 7dff4b537a3bfc9e1b67b40aab296bb2f2db377e Mon Sep 17 00:00:00 2001 From: deraadt Date: Fri, 5 Jun 2015 16:59:10 +0000 Subject: [PATCH] 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 --- sys/arch/alpha/alpha/trap.c | 3 +-- 1 file changed, 1 insertion(+), 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; } -- 2.20.1