svn commit: r333525 - head/sys/i386/i386
Konstantin Belousov
kib at FreeBSD.org
Sat May 12 11:02:40 UTC 2018
Author: kib
Date: Sat May 12 11:02:39 2018
New Revision: 333525
URL: https://svnweb.freebsd.org/changeset/base/333525
Log:
On return from exception or interrupt, returns to vm86 mode with
PCB_VM86CALL pcb flag not set should be treated same as return to
userspace.
Most important, the address space must be switched. This fixes
usermode vm86 operations after the 4/4 split.
Sponsored by: The FreeBSD Foundation
Modified:
head/sys/i386/i386/exception.s
Modified: head/sys/i386/i386/exception.s
==============================================================================
--- head/sys/i386/i386/exception.s Sat May 12 10:57:34 2018 (r333524)
+++ head/sys/i386/i386/exception.s Sat May 12 11:02:39 2018 (r333525)
@@ -502,11 +502,15 @@ doreti_exit:
je doreti_iret_nmi
cmpl $T_TRCTRAP, TF_TRAPNO(%esp)
je doreti_iret_nmi
- testl $SEL_RPL_MASK, TF_CS(%esp)
+ movl $TF_SZ, %ecx
+ testl $PSL_VM,TF_EFLAGS(%esp)
+ jz 1f /* PCB_VM86CALL is not set */
+ addl $VM86_STACK_SPACE, %ecx
+ jmp 2f
+1: testl $SEL_RPL_MASK, TF_CS(%esp)
jz doreti_popl_fs
- movl %esp, %esi
+2: movl %esp, %esi
movl PCPU(TRAMPSTK), %edx
- movl $TF_SZ, %ecx
subl %ecx, %edx
movl %edx, %edi
rep; movsb
More information about the svn-src-all
mailing list