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
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to