diff options
author | kib <kib@FreeBSD.org> | 2017-07-15 06:33:39 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2017-07-15 06:33:39 +0000 |
commit | 949e58d414f50cf9b9a2c84e40c70369abf5b42b (patch) | |
tree | 93bc0b25031dc723624e88ec1e04f5d783567bf5 | |
parent | 60e73c5897e0a446ace6cbed5a0dbe6e2dc3ee4c (diff) | |
download | FreeBSD-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.c | 7 |
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; |