summaryrefslogtreecommitdiff
path: root/sys/arch/arm64
diff options
context:
space:
mode:
authorTheo de Raadt <deraadt@cvs.openbsd.org>2019-09-06 12:22:02 +0000
committerTheo de Raadt <deraadt@cvs.openbsd.org>2019-09-06 12:22:02 +0000
commitf3b5414816d1323fb952a52969123786b389a6c0 (patch)
tree94a58359d3b32ff709692b3416cc02854b17e8fa /sys/arch/arm64
parent7cc0269c59f408ccac1b47fb15af749a306bc71b (diff)
If uvm_map_inentry returns false then a signal has been delivered, and
userret() must be called on trap() exit to deliver it, rather than repeating the same cause infinitely. discovered by George Koehler ok kettenis bluhm visa
Diffstat (limited to 'sys/arch/arm64')
-rw-r--r--sys/arch/arm64/arm64/trap.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/sys/arch/arm64/arm64/trap.c b/sys/arch/arm64/arm64/trap.c
index a92ddd06900..b346196430b 100644
--- a/sys/arch/arm64/arm64/trap.c
+++ b/sys/arch/arm64/arm64/trap.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: trap.c,v 1.24 2019/07/09 23:48:07 deraadt Exp $ */
+/* $OpenBSD: trap.c,v 1.25 2019/09/06 12:22:01 deraadt Exp $ */
/*-
* Copyright (c) 2014 Andrew Turner
* All rights reserved.
@@ -245,9 +245,9 @@ do_el0_sync(struct trapframe *frame)
if (!uvm_map_inentry(p, &p->p_spinentry, PROC_STACK(p),
"[%s]%d/%d sp=%lx inside %lx-%lx: not MAP_STACK\n",
uvm_map_inentry_sp, p->p_vmspace->vm_map.sserial))
- return;
+ goto out;
- switch(exception) {
+ switch (exception) {
case EXCP_UNKNOWN:
vfp_save();
curcpu()->ci_flush_bp();
@@ -316,7 +316,7 @@ do_el0_sync(struct trapframe *frame)
sigexit(p, SIGILL);
KERNEL_UNLOCK();
}
-
+out:
userret(p);
}