Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 12 May 2018 11:02:39 +0000 (UTC)
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r333525 - head/sys/i386/i386
Message-ID:  <201805121102.w4CB2djW093682@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201805121102.w4CB2djW093682>