diff options
author | 2017-07-21 09:19:05 +0000 | |
---|---|---|
committer | 2017-07-21 09:19:05 +0000 | |
commit | 1cfe4dab8400e8cec868989323f1d0b138e86ce7 (patch) | |
tree | d24ac46ec9232bf31788ab817f850305ace49f71 | |
parent | Add -c for respawn-pane and respawn-window, from J Raynor. (diff) | |
download | wireguard-openbsd-1cfe4dab8400e8cec868989323f1d0b138e86ce7.tar.xz wireguard-openbsd-1cfe4dab8400e8cec868989323f1d0b138e86ce7.zip |
Accessing a mmap(2)ed file behind its end should result in a SIGBUS
according to POSIX.
ok bluhm@, deraadt@
-rw-r--r-- | sys/arch/arm/arm/fault.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/sys/arch/arm/arm/fault.c b/sys/arch/arm/arm/fault.c index 7ed4ce466b3..bd600f9e2ea 100644 --- a/sys/arch/arm/arm/fault.c +++ b/sys/arch/arm/arm/fault.c @@ -1,4 +1,4 @@ -/* $OpenBSD: fault.c,v 1.28 2017/04/30 13:04:49 mpi Exp $ */ +/* $OpenBSD: fault.c,v 1.29 2017/07/21 09:19:05 kettenis Exp $ */ /* $NetBSD: fault.c,v 1.46 2004/01/21 15:39:21 skrll Exp $ */ /* @@ -339,16 +339,21 @@ data_abort_handler(trapframe_t *tf) dab_fatal(tf, fsr, far, p, NULL); } - sv.sival_ptr = (u_int32_t *)far; + sd.signo = SIGSEGV; + sd.code = SEGV_MAPERR; if (error == ENOMEM) { printf("UVM: pid %d (%s), uid %d killed: " "out of swap\n", p->p_p->ps_pid, p->p_p->ps_comm, p->p_ucred ? (int)p->p_ucred->cr_uid : -1); sd.signo = SIGKILL; - } else - sd.signo = SIGSEGV; - - sd.code = (error == EACCES) ? SEGV_ACCERR : SEGV_MAPERR; + sd.code = 0; + } + if (error == EACCES) + sd.code = SEGV_ACCERR; + if (error == EIO) { + sd.signo = SIGBUS; + sd.code = BUS_OBJERR; + } sd.addr = far; sd.trap = fsr; do_trapsignal: |