summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkettenis <kettenis@openbsd.org>2011-09-19 09:07:13 +0000
committerkettenis <kettenis@openbsd.org>2011-09-19 09:07:13 +0000
commit6431f9fb0b9338c5187c2cd047c0006e44f60f11 (patch)
treee3749bf20859415387459d68b78d9edef66b349f
parentRemove (annoying) debug printf. (diff)
downloadwireguard-openbsd-6431f9fb0b9338c5187c2cd047c0006e44f60f11.tar.xz
wireguard-openbsd-6431f9fb0b9338c5187c2cd047c0006e44f60f11.zip
Handle an instruction memory protection trap from userland as an ordinary
fault.
-rw-r--r--sys/arch/hppa64/hppa64/trap.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/sys/arch/hppa64/hppa64/trap.c b/sys/arch/hppa64/hppa64/trap.c
index c662d99af93..ad15eaf9b41 100644
--- a/sys/arch/hppa64/hppa64/trap.c
+++ b/sys/arch/hppa64/hppa64/trap.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: trap.c,v 1.23 2011/09/19 08:49:19 kettenis Exp $ */
+/* $OpenBSD: trap.c,v 1.24 2011/09/19 09:07:13 kettenis Exp $ */
/*
* Copyright (c) 2005 Michael Shalayeff
@@ -190,7 +190,8 @@ trap(int type, struct trapframe *frame)
opcode = frame->tf_iir;
if (trapnum <= T_EXCEPTION || trapnum == T_HIGHERPL ||
trapnum == T_LOWERPL || trapnum == T_TAKENBR ||
- trapnum == T_IDEBUG || trapnum == T_PERFMON) {
+ trapnum == T_IDEBUG || trapnum == T_PERFMON ||
+ trapnum == T_IPROT) {
va = frame->tf_iioq[0];
space = frame->tf_iisq[0];
vftype = UVM_PROT_EXEC;
@@ -366,7 +367,6 @@ trap(int type, struct trapframe *frame)
trapsignal(p, SIGSEGV, vftype, SEGV_ACCERR, sv);
break;
- case T_IPROT | T_USER:
case T_DPROT | T_USER:
sv.sival_int = va;
trapsignal(p, SIGSEGV, vftype, SEGV_ACCERR, sv);
@@ -414,6 +414,7 @@ trap(int type, struct trapframe *frame)
case T_TLB_DIRTY | T_USER:
case T_DATACC:
case T_DATACC | T_USER:
+ case T_IPROT | T_USER:
fault = VM_FAULT_PROTECT;
case T_ITLBMISS:
case T_ITLBMISS | T_USER: