Index: /trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp	(revision 78492)
+++ /trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp	(revision 78493)
@@ -12596,6 +12596,43 @@
         case VMX_EXIT_TASK_SWITCH:
         case VMX_EXIT_PREEMPT_TIMER:
+
         case VMX_EXIT_RDMSR:
+        {
+            uint32_t fMsrpm;
+            if (CPUMIsGuestVmxProcCtlsSet(pVCpu, &pVCpu->cpum.GstCtx, VMX_PROC_CTLS_USE_MSR_BITMAPS))
+                fMsrpm = CPUMGetVmxMsrPermission(pVCpu->cpum.GstCtx.hwvirt.vmx.CTX_SUFF(pvMsrBitmap), pVCpu->cpum.GstCtx.ecx);
+            else
+                fMsrpm = VMXMSRPM_EXIT_RD;
+
+            if (fMsrpm & VMXMSRPM_EXIT_RD)
+            {
+                int rc = hmR0VmxReadExitInstrLenVmcs(pVmxTransient);
+                AssertRCReturn(rc, rc);
+                rcStrict = IEMExecVmxVmexitInstr(pVCpu, uExitReason, pVmxTransient->cbInstr);
+            }
+            else
+                rcStrict = hmR0VmxExitRdmsr(pVCpu, pVmxTransient);
+            break;
+        }
+
         case VMX_EXIT_WRMSR:
+        {
+            uint32_t fMsrpm;
+            if (CPUMIsGuestVmxProcCtlsSet(pVCpu, &pVCpu->cpum.GstCtx, VMX_PROC_CTLS_USE_MSR_BITMAPS))
+                fMsrpm = CPUMGetVmxMsrPermission(pVCpu->cpum.GstCtx.hwvirt.vmx.CTX_SUFF(pvMsrBitmap), pVCpu->cpum.GstCtx.ecx);
+            else
+                fMsrpm = VMXMSRPM_EXIT_WR;
+
+            if (fMsrpm & VMXMSRPM_EXIT_WR)
+            {
+                int rc = hmR0VmxReadExitInstrLenVmcs(pVmxTransient);
+                AssertRCReturn(rc, rc);
+                rcStrict = IEMExecVmxVmexitInstr(pVCpu, uExitReason, pVmxTransient->cbInstr);
+            }
+            else
+                rcStrict = hmR0VmxExitWrmsr(pVCpu, pVmxTransient);
+            break;
+        }
+
         case VMX_EXIT_VMCALL:
         case VMX_EXIT_MOV_DRX:
