summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2017-07-15 06:33:39 +0000
committerkib <kib@FreeBSD.org>2017-07-15 06:33:39 +0000
commit949e58d414f50cf9b9a2c84e40c70369abf5b42b (patch)
tree93bc0b25031dc723624e88ec1e04f5d783567bf5
parent60e73c5897e0a446ace6cbed5a0dbe6e2dc3ee4c (diff)
downloadFreeBSD-src-949e58d414f50cf9b9a2c84e40c70369abf5b42b.zip
FreeBSD-src-949e58d414f50cf9b9a2c84e40c70369abf5b42b.tar.gz
MFC r320804:
Fix handling of one more possible exception on return to usermode.
-rw-r--r--sys/i386/i386/trap.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/sys/i386/i386/trap.c b/sys/i386/i386/trap.c
index 7c16b24..981e3f1 100644
--- a/sys/i386/i386/trap.c
+++ b/sys/i386/i386/trap.c
@@ -550,11 +550,7 @@ user_trctrap_out:
vm86_trap((struct vm86frame *)frame);
goto out;
}
- if (type == T_STKFLT)
- break;
-
/* FALL THROUGH */
-
case T_SEGNPFLT: /* segment not present fault */
if (curpcb->pcb_flags & PCB_VM86CALL)
break;
@@ -595,6 +591,9 @@ user_trctrap_out:
frame->tf_eip = (int)doreti_iret_fault;
goto out;
}
+ if (type == T_STKFLT)
+ break;
+
if (frame->tf_eip == (int)doreti_popl_ds) {
frame->tf_eip = (int)doreti_popl_ds_fault;
goto out;
OpenPOWER on IntegriCloud