diff --git a/include/x86/vmx.h b/include/x86/vmx.h index a54219e..2494cb8 100644 --- a/include/x86/vmx.h +++ b/include/x86/vmx.h @@ -20,6 +20,12 @@ #define HOST_GS_SELECTOR 0x0C0A #define HOST_TR_SELECTOR 0x0C0C +#define IO_BITMAP_ADDRESS_A 0x2000 +#define IO_BITMAP_ADDRESS_B 0x2002 +#define MSR_BITMAP_ADDRESS 0x2004 +#define VM_EXIT_MSR_STORE_ADDRESS 0x2006 +#define VM_EXIT_MSR_LOAD_ADDRESS 0x2008 + #define VMCS_LINK_POINTER 0x2800 #define GUEST_IA32_DEBUGCTL 0x2802 #define GUEST_IA32_PAT 0x2804 diff --git a/src/vintel.c b/src/vintel.c index 30127aa..69fadbe 100644 --- a/src/vintel.c +++ b/src/vintel.c @@ -207,8 +207,12 @@ vintel_init_host(void) // Set GDT and IDT checked_vmwrite(HOST_GDTR_BASE, (uintptr_t)pv->host_gdtr.base); checked_vmwrite(HOST_IDTR_BASE, (uintptr_t)pv->host_idtr.base); + checked_vmwrite(HOST_FS_BASE, 0); + checked_vmwrite(HOST_GS_BASE, 0); + checked_vmwrite(HOST_TR_BASE, 0); // TODO proper value // Dummy sysenter & sysexit values + checked_vmwrite(HOST_SYSENTER_CS, 0x08); checked_vmwrite(HOST_SYSENTER_ESP, 0x4000); checked_vmwrite(HOST_SYSENTER_EIP, 0x4000); } @@ -275,6 +279,12 @@ vintel_enable(void) checked_vmwrite(VM_EXIT_CONTROLS, exitControls); AsciiPrint("VM_EXIT_CONTROLS: %lx\n", exitControls); + checked_vmwrite(IO_BITMAP_ADDRESS_A, 0); + checked_vmwrite(IO_BITMAP_ADDRESS_B, 0); + checked_vmwrite(MSR_BITMAP_ADDRESS, 0); + checked_vmwrite(VM_EXIT_MSR_STORE_ADDRESS, 0); + checked_vmwrite(VM_EXIT_MSR_LOAD_ADDRESS, 0); + checked_vmwrite(VM_ENTRY_MSR_LOAD_COUNT, 0); checked_vmwrite(VM_ENTRY_INTR_INFO_FIELD, 0); checked_vmwrite(VM_EXIT_MSR_STORE_COUNT, 0);