Index: /trunk/src/VBox/VMM/VMMAll/IEMAll.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMAll/IEMAll.cpp	(revision 76274)
+++ /trunk/src/VBox/VMM/VMMAll/IEMAll.cpp	(revision 76275)
@@ -14004,5 +14004,8 @@
      *
      * If any of these causes a VM-exit, we must skip executing the next
-     * instruction (so we set fExecuteInhibit to false).
+     * instruction (would run into stale page tables). A VM-exit makes sure
+     * there is no interrupt-inhibition, so that should ensure we don't go
+     * to try execute the next instruction. Clearing fExecuteInhibit is
+     * problematic because of the setjmp/longjmp clobbering above.
      */
     if (   rcStrict == VINF_SUCCESS
@@ -14013,6 +14016,5 @@
         {
             rcStrict = iemVmxApicWriteEmulation(pVCpu);
-            if (rcStrict != VINF_SUCCESS)
-                fExecuteInhibit = false;
+            Assert(!VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_INHIBIT_INTERRUPTS));
             Assert(!VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_VMX_APIC_WRITE));
         }
@@ -14021,5 +14023,5 @@
         {
             rcStrict = iemVmxVmexitMtf(pVCpu);
-            fExecuteInhibit = false;
+            Assert(!VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_INHIBIT_INTERRUPTS));
             Assert(!VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_VMX_MTF));
         }
@@ -14032,6 +14034,6 @@
             else
             {
+                Assert(!VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_INHIBIT_INTERRUPTS));
                 Assert(!VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_VMX_PREEMPT_TIMER));
-                fExecuteInhibit = false;
             }
         }
