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-head mailing list