From: deraadt Date: Fri, 5 Jun 2015 16:59:10 +0000 (+0000) Subject: Do not unconditionally clear pcb_onfault after a uvm_fault. That will X-Git-Url: http://artulab.com/gitweb/?a=commitdiff_plain;h=7dff4b537a3bfc9e1b67b40aab296bb2f2db377e;p=openbsd 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 --- 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; }