How to suspend and resume VM with VMX

2

I have worked out a toy hypervisor with VMX in Linux, and it can work well with my testing VM. Now I am trying to test suspend and resume my testing VM with my toy hypervisor. I did followings to suspend the VM.

The VM starts in real-mode, and then goes to protected mode. It call a wrmsr, which will cause VMEXIT. The hypervisor gets the VMEXIT, then saves the CPU contexts (gprs, segment regs, descriptor tables, etc) and the VM's memory into a disk file, and quit. (VMXON/VMCS regions are not cleared).

Now, restart the VM loader, it will read the disk file, save the CPU contexts into the VMCS fields, and populate the VM's memory. Then tell the hypervisor to start the VM by calling 'vmlaunch'. (Before that, the hypervisor will call vmxon, vmclear, vmptrld, and vmwrite the VMCS fields and guest CPU contexts). My expectation is the VM will resume from its RIP saved before.
But it failed with 'invalid guest state'

Below is the VMCS dump just at the WRMSR VMEXIT.

[ 9021.315014]  # VPID = 0x0
[ 9021.315016]    # vmread(0x2) failed
[ 9021.315017]    # RFLAGS: 0x242
[ 9021.315018]  # POSTED_INTERRUPT_NOTIFICATION_VECTOR   INVALID_VALUE
[ 9021.315021]  # EPTP_INDEX = 0x0
[ 9021.315022]  # GUEST_ES_SEL = 0x10
[ 9021.315023]  # GUEST_CS_SEL = 0x8
[ 9021.315024]  # GUEST_SS_SEL = 0x10
[ 9021.315025]  # GUEST_DS_SEL = 0x10
[ 9021.315026]  # GUEST_FS_SEL = 0x0
[ 9021.315027]  # GUEST_GS_SEL = 0x0
[ 9021.315028]  # GUEST_LDTR_SEL = 0x0
[ 9021.315029]  # GUEST_TR_SEL = 0x0
[ 9021.315030]  # GUEST_INTERRUPT_STATUS = 0x0
[ 9021.315032]  # HOST_ES_SEL = 0x0
[ 9021.315034]  # HOST_CS_SEL = 0x10
[ 9021.315036]  # HOST_SS_SEL = 0x18
[ 9021.315038]  # HOST_DS_SEL = 0x0
[ 9021.315040]  # HOST_FS_SEL = 0x0
[ 9021.315042]  # HOST_GS_SEL = 0x0
[ 9021.315044]  # HOST_TR_SEL = 0x40
[ 9021.315047]  # IO_BITMAP_A_FULL = 0x0
[ 9021.315049]  # IO_BITMAP_A_HIGH = 0x0
[ 9021.315051]  # IO_BITMAP_B_FULL = 0x0
[ 9021.315053]  # IO_BITMAP_B_HIGH = 0x0
[ 9021.315055]  # MSR_BITMAP_FULL = 0x0
[ 9021.315057]  # MSR_BITMAP_HIGH = 0x0
[ 9021.315060]  # EXIT_MSR_STORE_ADDR_FULL = 0x0
[ 9021.315062]  # EXIT_MSR_STORE_ADDR_HIGH = 0x0
[ 9021.315064]  # EXIT_MSR_LOAD_ADDR_FULL = 0x7bbbc000
[ 9021.315066]  # EXIT_MSR_LOAD_ADDR_HIGH = 0x0
[ 9021.315068]  # ENTRY_MSR_LOAD_ADDR_FULL = 0x0
[ 9021.315071]  # ENTRY_MSR_LOAD_ADDR_HIGH = 0x0
[ 9021.315073]  # EXECUTIVE_VMCS_PTR_FULL = 0x0
[ 9021.315075]  # EXECUTIVE_VMCS_PTR_HIGH = 0x0
[ 9021.315077]  # TSC_OFFSET_FULL = 0xffffeb76bf0129ef
[ 9021.315079]  # TSC_OFFSET_HIGH = 0xffffeb76
[ 9021.315082]  # VIRTUAL_APIC_PAGE_ADDR_FULL = 0x0
[ 9021.315084]  # VIRTUAL_APIC_PAGE_ADDR_HIGH = 0x0
[ 9021.315086]    # vmread(0x2014) failed
[ 9021.315087]    # RFLAGS: 0x242
[ 9021.315088]  # APIC_ACCESS_ADDR_FULL          INVALID_VALUE
[ 9021.315090]    # vmread(0x2015) failed
[ 9021.315091]    # RFLAGS: 0x242
[ 9021.315092]  # APIC_ACCESS_ADDR_HIGH          INVALID_VALUE
[ 9021.315094]    # vmread(0x2016) failed
[ 9021.315094]    # RFLAGS: 0x242
[ 9021.315096]  # POSTED_INTERRUPT_DESCRIPTION_ADDR_FULL         INVALID_VALUE
[ 9021.315098]    # vmread(0x2017) failed
[ 9021.315098]    # RFLAGS: 0x242
[ 9021.315099]  # POSTED_INTERRUPT_DESCRIPTION_ADDR_HIGH         INVALID_VALUE
[ 9021.315102]  # VM_FUNCTION_CTRL_FULL = 0x0
[ 9021.315104]  # VM_FUNCTION_CTRL_HIGH = 0x0
[ 9021.315106]  # EPT_POINTER_FULL = 0xb0932058
[ 9021.315108]  # EPT_POINTER_HIGH = 0x0
[ 9021.315110]    # vmread(0x201C) failed
[ 9021.315111]    # RFLAGS: 0x242
[ 9021.315112]  # EOI_EXIT_BITMAP_0_FULL         INVALID_VALUE
[ 9021.315114]    # vmread(0x201D) failed
[ 9021.315115]    # RFLAGS: 0x242
[ 9021.315116]  # EOI_EXIT_BITMAP_0_HIGH         INVALID_VALUE
[ 9021.315118]    # vmread(0x201E) failed
[ 9021.315119]    # RFLAGS: 0x242
[ 9021.315120]  # EOI_EXIT_BITMAP_1_FULL         INVALID_VALUE
[ 9021.315122]    # vmread(0x201F) failed
[ 9021.315123]    # RFLAGS: 0x242
[ 9021.315124]  # EOI_EXIT_BITMAP_1_HIGH         INVALID_VALUE
[ 9021.315126]    # vmread(0x2020) failed
[ 9021.315126]    # RFLAGS: 0x242
[ 9021.315127]  # EOI_EXIT_BITMAP_2_FULL         INVALID_VALUE
[ 9021.315129]    # vmread(0x2021) failed
[ 9021.315130]    # RFLAGS: 0x242
[ 9021.315131]  # EOI_EXIT_BITMAP_2_HIGH         INVALID_VALUE
[ 9021.315133]    # vmread(0x2022) failed
[ 9021.315134]    # RFLAGS: 0x242
[ 9021.315135]  # EOI_EXIT_BITMAP_3_FULL         INVALID_VALUE
[ 9021.315137]    # vmread(0x2023) failed
[ 9021.315138]    # RFLAGS: 0x242
[ 9021.315139]  # EOI_EXIT_BITMAP_3_HIGH         INVALID_VALUE
[ 9021.315141]  # EPTP_LIST_ADDRESS_FULL = 0x0
[ 9021.315143]  # EPTP_LIST_ADDRESS_HIGH = 0x0
[ 9021.315145]    # vmread(0x2026) failed
[ 9021.315146]    # RFLAGS: 0x242
[ 9021.315147]  # VMREAD_BITMAP_ADDRESS_FULL     INVALID_VALUE
[ 9021.315149]    # vmread(0x2027) failed
[ 9021.315150]    # RFLAGS: 0x242
[ 9021.315151]  # VMREAD_BITMAP_ADDRESS_HIGH     INVALID_VALUE
[ 9021.315153]    # vmread(0x2028) failed
[ 9021.315153]    # RFLAGS: 0x242
[ 9021.315154]  # VMWRITE_BITMAP_ADDRESS_FULL    INVALID_VALUE
[ 9021.315156]    # vmread(0x2029) failed
[ 9021.315157]    # RFLAGS: 0x242
[ 9021.315158]  # VMWRITE_BITMAP_ADDRESS_HIGH    INVALID_VALUE
[ 9021.315160]  # VE_INFO_ADDRESS_FULL = 0x0
[ 9021.315162]  # VE_INFO_ADDRESS_HIGH = 0x0
[ 9021.315164]  # GUEST_PHYSICAL_ADDR_FULL = 0x7c60
[ 9021.315165]  # GUEST_PHYSICAL_ADDR_HIGH = 0x0
[ 9021.315167]  # VMCS_LINK_PTR_FULL = 0xffffffffffffffff
[ 9021.315169]  # VMCS_LINK_PTR_HIGH = 0xffffffff
[ 9021.315171]  # GUEST_IA32_DEBUGCTL_FULL = 0x0
[ 9021.315174]  # GUEST_IA32_DEBUGCTL_HIGH = 0x0
[ 9021.315176]  # GUEST_IA32_PAT_FULL = 0x0
[ 9021.315179]  # GUEST_IA32_PAT_HIGH = 0x0
[ 9021.315185]  # GUEST_IA32_EFER_FULL = 0x0
[ 9021.315189]  # GUEST_IA32_EFER_HIGH = 0x0
[ 9021.315192]  # GUEST_IA32_PERF_CTL_FULL = 0x0
[ 9021.315195]  # GUEST_IA32_PERF_CTL_HIGH = 0x0
[ 9021.315197]  # GUEST_PDPTE0_FULL = 0x0
[ 9021.315198]  # GUEST_PDPTE0_HIGH = 0x0
[ 9021.315200]  # GUEST_PDPTE1_FULL = 0x0
[ 9021.315201]  # GUEST_PDPTE1_HIGH = 0x0
[ 9021.315203]  # GUEST_PDPTE2_FULL = 0x0
[ 9021.315204]  # GUEST_PDPTE2_HIGH = 0x0
[ 9021.315205]  # GUEST_PDPTE3_FULL = 0x0
[ 9021.315206]  # GUEST_PDPTE3_HIGH = 0x0
[ 9021.315209]  # HOST_IA32_PAT_FULL = 0x0
[ 9021.315212]  # HOST_IA32_PAT_HIGH = 0x0
[ 9021.315216]  # HOST_IA32_EFER_FULL = 0x0
[ 9021.315219]  # HOST_IA32_EFER_HIGH = 0x0
[ 9021.315222]  # HOST_IA32_PERF_CTL_FULL = 0x0
[ 9021.315226]  # HOST_IA32_PERF_CTL_HIGH = 0x0
[ 9021.315229]  # PIN_VM_EXEC_CONTROLS = 0x1f
[ 9021.315231]  # PROC_VM_EXEC_CONTROLS = 0xa501e9fa
[ 9021.315234]  # EXCEPTION_BITMAP = 0xfffffffe
[ 9021.315268]  # PAGEFAULT_ERRCODE_MASK = 0x0
[ 9021.315273]  # PAGEFAULT_ERRCODE_MATCH = 0xffffffff
[ 9021.315276]  # CR3_TARGET_COUNT = 0x0
[ 9021.315282]  # EXIT_CONTROLS = 0x36ffb
[ 9021.315285]  # EXIT_MSR_STORE_COUNT = 0x0
[ 9021.315289]  # EXIT_MSR_LOAD_COUNT = 0x5
[ 9021.315292]  # ENTRY_CONTROLS = 0x11fb
[ 9021.315295]  # ENTRY_MSR_LOAD_COUNT = 0x0
[ 9021.315298]  # ENTRY_INT_INFO_FIELD = 0x0
[ 9021.315301]  # ENTRY_EXCEPTION_EC = 0x0
[ 9021.315304]  # ENTRY_INSTR_LENGTH = 0x0
[ 9021.315307]  # TPR_THRESHOLD = 0x0
[ 9021.315310]  # PROC_VM_EXEC_CONTROLS2 = 0x82
[ 9021.315313]  # PLE_GAP = 0x0
[ 9021.315339]  # PLE_WINDOW = 0x0
[ 9021.315360]  # INSTR_ERROR = 0xc
[ 9021.315363]  # EXIT_REASON = 0x20
[ 9021.315364]  # EXIT_INTERRUPT_INFO = 0x0
[ 9021.315365]  # EXIT_INTERRUPT_ERRCODE = 0x0
[ 9021.315367]  # IDT_VECTORING_INFO_FIELD = 0x0
[ 9021.315389]  # IDT_VECTORING_ERRCODE = 0x0
[ 9021.315391]  # EXIT_INSTR_LEN = 0x2
[ 9021.315392]  # INSTR_INFO = 0x0
[ 9021.315394]  # GUEST_ES_LIMIT = 0xffffffff
[ 9021.315395]  # GUEST_CS_LIMIT = 0xffffffff
[ 9021.315396]  # GUEST_SS_LIMIT = 0xffffffff
[ 9021.315398]  # GUEST_DS_LIMIT = 0xffffffff
[ 9021.315399]  # GUEST_FS_LIMIT = 0xffffffff
[ 9021.315401]  # GUEST_GS_LIMIT = 0xffffffff
[ 9021.315402]  # GUEST_LDTR_LIMIT = 0xffff
[ 9021.315404]  # GUEST_TR_LIMIT = 0xffff
[ 9021.315406]  # GUEST_GDTR_LIMIT = 0x17
[ 9021.315407]  # GUEST_IDTR_LIMIT = 0xffff
[ 9021.315409]  # GUEST_ES_ATTR = 0xc093
[ 9021.315410]  # GUEST_CS_ATTR = 0xc09b
[ 9021.315412]  # GUEST_SS_ATTR = 0xc093
[ 9021.315413]  # GUEST_DS_ATTR = 0xc093
[ 9021.315415]  # GUEST_FS_ATTR = 0x1c000
[ 9021.315416]  # GUEST_GS_ATTR = 0x1c000
[ 9021.315417]  # GUEST_LDTR_ATTR = 0x82
[ 9021.315418]  # GUEST_TR_ATTR = 0x8b
[ 9021.315419]  # GUEST_INTERRUPTIBILITY_INFO = 0x0
[ 9021.315422]  # GUEST_ACTIVITY_STATE = 0x0
[ 9021.315424]  # GUEST_SMBASE = 0x0
[ 9021.315425]  # GUEST_IA32_SYSENTER_CS = 0x0
[ 9021.315427]    # vmread(0x482E) failed
[ 9021.315428]    # RFLAGS: 0x242
[ 9021.315429]  # GUEST_PREEMTION_TIMER          INVALID_VALUE
[ 9021.315432]  # HOST_IA32_SYSENTER_CS = 0x10
[ 9021.315434]  # CR0_MASK = 0xfffffffffffffff0
[ 9021.315436]  # CR4_MASK = 0xfffffffffffff871
[ 9021.315438]  # CR0_READ_SHADOW = 0x60000010
[ 9021.315441]  # CR4_READ_SHADOW = 0x10
[ 9021.315443]  # CR3_TARGET_0 = 0x0
[ 9021.315445]  # CR3_TARGET_1 = 0x83068000
[ 9021.315447]  # CR3_TARGET_2 = 0x0
[ 9021.315449]  # CR3_TARGET_3 = 0x0
[ 9021.315450]  # EXIT_QUALIFICATION = 0x0
[ 9021.315451]  # IO_RCX = 0x189f
[ 9021.315452]  # IO_RSI = 0x10
[ 9021.315453]  # IO_RDI = 0xffff97040f139bff
[ 9021.315454]  # IO_RIP = 0x7c1b
[ 9021.315455]  # GUEST_LINEAR_ADDR = 0x7c60
[ 9021.315457]  # GUEST_CR0 = 0x31
[ 9021.315458]  # GUEST_CR3 = 0x0
[ 9021.315459]  # GUEST_CR4 = 0x2050
[ 9021.315460]  # GUEST_ES_BASE = 0x0
[ 9021.315461]  # GUEST_CS_BASE = 0x0
[ 9021.315462]  # GUEST_SS_BASE = 0x0
[ 9021.315463]  # GUEST_DS_BASE = 0x0
[ 9021.315464]  # GUEST_FS_BASE = 0x0
[ 9021.315465]  # GUEST_GS_BASE = 0x0
[ 9021.315466]  # GUEST_LDTR_BASE = 0x0
[ 9021.315467]  # GUEST_TR_BASE = 0x0
[ 9021.315468]  # GUEST_GDTR_BASE = 0x7c58
[ 9021.315469]  # GUEST_IDTR_BASE = 0x0
[ 9021.315472]  # GUEST_DR7 = 0x400
[ 9021.315473]  # GUEST_RSP = 0x7bfa
[ 9021.315474]  # GUEST_RIP = 0x7c43
[ 9021.315475]  # GUEST_RFLAGS = 0x6
[ 9021.315476]  # GUEST_PENDING_DEBUG_EXCEPT = 0x0
[ 9021.315477]  # GUEST_IA32_SYSENTER_ESP = 0x0
[ 9021.315478]  # GUEST_IA32_SYSENTER_EIP = 0x0
[ 9021.315480]  # HOST_CR0 = 0x80050033
[ 9021.315482]  # HOST_CR3 = 0x83068000
[ 9021.315484]  # HOST_CR4 = 0x362670
[ 9021.315486]  # HOST_FS_BASE = 0x7f4acf98e700
[ 9021.315489]  # HOST_GS_BASE = 0xffff8800ba640000
[ 9021.315491]  # HOST_TR_BASE = 0xffff8800ba6448c0
[ 9021.315493]  # HOST_GDTR_BASE = 0xffff8800ba64c000
[ 9021.315495]  # HOST_IDTR_BASE = 0xffffffffff574000
[ 9021.315498]  # HOST_IA32_SYSENTER_ESP = 0x0
[ 9021.315500]  # HOST_IA32_SYSENTER_EIP = 0xffffffff81852720
[ 9021.315502]  # HOST_RSP = 0xffff88008279fde0
[ 9021.315504]  # HOST_RIP = 0xffffffffc05b85d5
[ 9021.315507]  # (null) = 0x0

and, VMX Guest State

 CR0=0000000000000031  CR3=0000000000000000  CR4=0000000000002050

 RSP=0000000000007BFA  SYSENTER_ESP=0000000000000000
 RIP=0000000000007C45  SYSENTER_EIP=0000000000000000
 DR7=0000000000000400  SYSENTER_CS=00000000  RFLAGS=0000000000000006

   ES=0010  [ base=0000000000000000 limit=FFFFFFFF rights=0000C093 ]
   CS=0008  [ base=0000000000000000 limit=FFFFFFFF rights=0000C09B ]
   SS=0010  [ base=0000000000000000 limit=FFFFFFFF rights=0000C093 ]
   DS=0010  [ base=0000000000000000 limit=FFFFFFFF rights=0000C093 ]
   FS=0000  [ base=0000000000000000 limit=FFFFFFFF rights=0001C000 ]
   GS=0000  [ base=0000000000000000 limit=FFFFFFFF rights=0001C000 ]
 LDTR=0000  [ base=0000000000000000 limit=0000FFFF rights=00000082 ]
   TR=0000  [ base=0000000000000000 limit=0000FFFF rights=0000008B ]
      GDTR  [ base=0000000000007C58 limit=00000017 ]
      IDTR  [ base=0000000000000000 limit=0000FFFF ]

 EAX=60000000  ECX=00000000  ESI=00000000  ESP=00007BFA   extints=0
 EBX=00000000  EDX=00000000  EDI=00000000  EBP=00000000   nmiints=0

Here is the VMCS dump when resuming VM and hitting 'invalid guest state'.

[ 9148.130353]  # VPID = 0x0
[ 9148.130356]    # vmread(0x2) failed
[ 9148.130357]    # RFLAGS: 0x242
[ 9148.130358]  # POSTED_INTERRUPT_NOTIFICATION_VECTOR   INVALID_VALUE
[ 9148.130360]  # EPTP_INDEX = 0x0
[ 9148.130361]  # GUEST_ES_SEL = 0x10
[ 9148.130362]  # GUEST_CS_SEL = 0x8
[ 9148.130363]  # GUEST_SS_SEL = 0x10
[ 9148.130364]  # GUEST_DS_SEL = 0x10
[ 9148.130365]  # GUEST_FS_SEL = 0x0
[ 9148.130366]  # GUEST_GS_SEL = 0x0
[ 9148.130367]  # GUEST_LDTR_SEL = 0x0
[ 9148.130368]  # GUEST_TR_SEL = 0x0
[ 9148.130369]  # GUEST_INTERRUPT_STATUS = 0x0
[ 9148.130371]  # HOST_ES_SEL = 0x0
[ 9148.130373]  # HOST_CS_SEL = 0x10
[ 9148.130375]  # HOST_SS_SEL = 0x18
[ 9148.130377]  # HOST_DS_SEL = 0x0
[ 9148.130379]  # HOST_FS_SEL = 0x0
[ 9148.130381]  # HOST_GS_SEL = 0x0
[ 9148.130383]  # HOST_TR_SEL = 0x40
[ 9148.130385]  # IO_BITMAP_A_FULL = 0x0
[ 9148.130388]  # IO_BITMAP_A_HIGH = 0x0
[ 9148.130390]  # IO_BITMAP_B_FULL = 0x0
[ 9148.130392]  # IO_BITMAP_B_HIGH = 0x0
[ 9148.130394]  # MSR_BITMAP_FULL = 0x0
[ 9148.130396]  # MSR_BITMAP_HIGH = 0x0
[ 9148.130398]  # EXIT_MSR_STORE_ADDR_FULL = 0x0
[ 9148.130400]  # EXIT_MSR_STORE_ADDR_HIGH = 0x0
[ 9148.130403]  # EXIT_MSR_LOAD_ADDR_FULL = 0x7bbbc000
[ 9148.130405]  # EXIT_MSR_LOAD_ADDR_HIGH = 0x0
[ 9148.130407]  # ENTRY_MSR_LOAD_ADDR_FULL = 0x0
[ 9148.130409]  # ENTRY_MSR_LOAD_ADDR_HIGH = 0x0
[ 9148.130411]  # EXECUTIVE_VMCS_PTR_FULL = 0x0
[ 9148.130414]  # EXECUTIVE_VMCS_PTR_HIGH = 0x0
[ 9148.130416]  # TSC_OFFSET_FULL = 0xffffeb2ce65fe8da
[ 9148.130418]  # TSC_OFFSET_HIGH = 0xffffeb2c
[ 9148.130420]  # VIRTUAL_APIC_PAGE_ADDR_FULL = 0x0
[ 9148.130422]  # VIRTUAL_APIC_PAGE_ADDR_HIGH = 0x0
[ 9148.130424]    # vmread(0x2014) failed
[ 9148.130425]    # RFLAGS: 0x242
[ 9148.130426]  # APIC_ACCESS_ADDR_FULL          INVALID_VALUE
[ 9148.130428]    # vmread(0x2015) failed
[ 9148.130429]    # RFLAGS: 0x242
[ 9148.130430]  # APIC_ACCESS_ADDR_HIGH          INVALID_VALUE
[ 9148.130432]    # vmread(0x2016) failed
[ 9148.130433]    # RFLAGS: 0x242
[ 9148.130434]  # POSTED_INTERRUPT_DESCRIPTION_ADDR_FULL         INVALID_VALUE
[ 9148.130436]    # vmread(0x2017) failed
[ 9148.130437]    # RFLAGS: 0x242
[ 9148.130438]  # POSTED_INTERRUPT_DESCRIPTION_ADDR_HIGH         INVALID_VALUE
[ 9148.130440]  # VM_FUNCTION_CTRL_FULL = 0x0
[ 9148.130442]  # VM_FUNCTION_CTRL_HIGH = 0x0
[ 9148.130444]  # EPT_POINTER_FULL = 0xafea5058
[ 9148.130446]  # EPT_POINTER_HIGH = 0x0
[ 9148.130448]    # vmread(0x201C) failed
[ 9148.130449]    # RFLAGS: 0x242
[ 9148.130450]  # EOI_EXIT_BITMAP_0_FULL         INVALID_VALUE
[ 9148.130452]    # vmread(0x201D) failed
[ 9148.130453]    # RFLAGS: 0x242
[ 9148.130454]  # EOI_EXIT_BITMAP_0_HIGH         INVALID_VALUE
[ 9148.130456]    # vmread(0x201E) failed
[ 9148.130457]    # RFLAGS: 0x242
[ 9148.130458]  # EOI_EXIT_BITMAP_1_FULL         INVALID_VALUE
[ 9148.130460]    # vmread(0x201F) failed
[ 9148.130461]    # RFLAGS: 0x242
[ 9148.130462]  # EOI_EXIT_BITMAP_1_HIGH         INVALID_VALUE
[ 9148.130464]    # vmread(0x2020) failed
[ 9148.130464]    # RFLAGS: 0x242
[ 9148.130465]  # EOI_EXIT_BITMAP_2_FULL         INVALID_VALUE
[ 9148.130467]    # vmread(0x2021) failed
[ 9148.130468]    # RFLAGS: 0x242
[ 9148.130469]  # EOI_EXIT_BITMAP_2_HIGH         INVALID_VALUE
[ 9148.130471]    # vmread(0x2022) failed
[ 9148.130472]    # RFLAGS: 0x242
[ 9148.130473]  # EOI_EXIT_BITMAP_3_FULL         INVALID_VALUE
[ 9148.130475]    # vmread(0x2023) failed
[ 9148.130476]    # RFLAGS: 0x242
[ 9148.130477]  # EOI_EXIT_BITMAP_3_HIGH         INVALID_VALUE
[ 9148.130479]  # EPTP_LIST_ADDRESS_FULL = 0x0
[ 9148.130481]  # EPTP_LIST_ADDRESS_HIGH = 0x0
[ 9148.130483]    # vmread(0x2026) failed
[ 9148.130484]    # RFLAGS: 0x242
[ 9148.130485]  # VMREAD_BITMAP_ADDRESS_FULL     INVALID_VALUE
[ 9148.130487]    # vmread(0x2027) failed
[ 9148.130488]    # RFLAGS: 0x242
[ 9148.130488]  # VMREAD_BITMAP_ADDRESS_HIGH     INVALID_VALUE
[ 9148.130490]    # vmread(0x2028) failed
[ 9148.130491]    # RFLAGS: 0x242
[ 9148.130492]  # VMWRITE_BITMAP_ADDRESS_FULL    INVALID_VALUE
[ 9148.130494]    # vmread(0x2029) failed
[ 9148.130495]    # RFLAGS: 0x242
[ 9148.130496]  # VMWRITE_BITMAP_ADDRESS_HIGH    INVALID_VALUE
[ 9148.130498]  # VE_INFO_ADDRESS_FULL = 0x0
[ 9148.130500]  # VE_INFO_ADDRESS_HIGH = 0x0
[ 9148.130501]  # GUEST_PHYSICAL_ADDR_FULL = 0x0
[ 9148.130503]  # GUEST_PHYSICAL_ADDR_HIGH = 0x0
[ 9148.130505]  # VMCS_LINK_PTR_FULL = 0xffffffffffffffff
[ 9148.130507]  # VMCS_LINK_PTR_HIGH = 0xffffffff
[ 9148.130509]  # GUEST_IA32_DEBUGCTL_FULL = 0x0
[ 9148.130511]  # GUEST_IA32_DEBUGCTL_HIGH = 0x0
[ 9148.130513]  # GUEST_IA32_PAT_FULL = 0x0
[ 9148.130516]  # GUEST_IA32_PAT_HIGH = 0x0
[ 9148.130518]  # GUEST_IA32_EFER_FULL = 0x0
[ 9148.130520]  # GUEST_IA32_EFER_HIGH = 0x0
[ 9148.130522]  # GUEST_IA32_PERF_CTL_FULL = 0x0
[ 9148.130524]  # GUEST_IA32_PERF_CTL_HIGH = 0x0
[ 9148.130525]  # GUEST_PDPTE0_FULL = 0x0
[ 9148.130526]  # GUEST_PDPTE0_HIGH = 0x0
[ 9148.130527]  # GUEST_PDPTE1_FULL = 0x0
[ 9148.130528]  # GUEST_PDPTE1_HIGH = 0x0
[ 9148.130529]  # GUEST_PDPTE2_FULL = 0x0
[ 9148.130530]  # GUEST_PDPTE2_HIGH = 0x0
[ 9148.130531]  # GUEST_PDPTE3_FULL = 0x0
[ 9148.130532]  # GUEST_PDPTE3_HIGH = 0x0
[ 9148.130534]  # HOST_IA32_PAT_FULL = 0x0
[ 9148.130536]  # HOST_IA32_PAT_HIGH = 0x0
[ 9148.130538]  # HOST_IA32_EFER_FULL = 0x0
[ 9148.130541]  # HOST_IA32_EFER_HIGH = 0x0
[ 9148.130543]  # HOST_IA32_PERF_CTL_FULL = 0x0
[ 9148.130545]  # HOST_IA32_PERF_CTL_HIGH = 0x0
[ 9148.130547]  # PIN_VM_EXEC_CONTROLS = 0x1f
[ 9148.130549]  # PROC_VM_EXEC_CONTROLS = 0xa501e9fa
[ 9148.130552]  # EXCEPTION_BITMAP = 0xfffffffe
[ 9148.130554]  # PAGEFAULT_ERRCODE_MASK = 0x0
[ 9148.130556]  # PAGEFAULT_ERRCODE_MATCH = 0xffffffff
[ 9148.130558]  # CR3_TARGET_COUNT = 0x0
[ 9148.130560]  # EXIT_CONTROLS = 0x36ffb
[ 9148.130562]  # EXIT_MSR_STORE_COUNT = 0x0
[ 9148.130564]  # EXIT_MSR_LOAD_COUNT = 0x5
[ 9148.130567]  # ENTRY_CONTROLS = 0x11fb
[ 9148.130569]  # ENTRY_MSR_LOAD_COUNT = 0x0
[ 9148.130571]  # ENTRY_INT_INFO_FIELD = 0x0
[ 9148.130573]  # ENTRY_EXCEPTION_EC = 0x0
[ 9148.130575]  # ENTRY_INSTR_LENGTH = 0x0
[ 9148.130577]  # TPR_THRESHOLD = 0x0
[ 9148.130579]  # PROC_VM_EXEC_CONTROLS2 = 0x82
[ 9148.130581]  # PLE_GAP = 0x0
[ 9148.130583]  # PLE_WINDOW = 0x0
[ 9148.130586]  # INSTR_ERROR = 0xc
[ 9148.130587]  # EXIT_REASON = 0x80000021
[ 9148.130588]  # EXIT_INTERRUPT_INFO = 0x0
[ 9148.130589]  # EXIT_INTERRUPT_ERRCODE = 0x0
[ 9148.130590]  # IDT_VECTORING_INFO_FIELD = 0x0
[ 9148.130591]  # IDT_VECTORING_ERRCODE = 0x0
[ 9148.130592]  # EXIT_INSTR_LEN = 0x0
[ 9148.130593]  # INSTR_INFO = 0x0
[ 9148.130594]  # GUEST_ES_LIMIT = 0xffffffff
[ 9148.130595]  # GUEST_CS_LIMIT = 0xffffffff
[ 9148.130596]  # GUEST_SS_LIMIT = 0xffffffff
[ 9148.130597]  # GUEST_DS_LIMIT = 0xffffffff
[ 9148.130598]  # GUEST_FS_LIMIT = 0xffffffff
[ 9148.130599]  # GUEST_GS_LIMIT = 0xffffffff
[ 9148.130600]  # GUEST_LDTR_LIMIT = 0xffff
[ 9148.130601]  # GUEST_TR_LIMIT = 0xffff
[ 9148.130602]  # GUEST_GDTR_LIMIT = 0x17
[ 9148.130603]  # GUEST_IDTR_LIMIT = 0xffff
[ 9148.130604]  # GUEST_ES_ATTR = 0xc093
[ 9148.130605]  # GUEST_CS_ATTR = 0xc09b
[ 9148.130606]  # GUEST_SS_ATTR = 0xc093
[ 9148.130607]  # GUEST_DS_ATTR = 0xc093
[ 9148.130608]  # GUEST_FS_ATTR = 0xc000
[ 9148.130609]  # GUEST_GS_ATTR = 0xc000
[ 9148.130610]  # GUEST_LDTR_ATTR = 0x82
[ 9148.130611]  # GUEST_TR_ATTR = 0x8b
[ 9148.130612]  # GUEST_INTERRUPTIBILITY_INFO = 0x0
[ 9148.130614]  # GUEST_ACTIVITY_STATE = 0x0
[ 9148.130616]  # GUEST_SMBASE = 0x0
[ 9148.130617]  # GUEST_IA32_SYSENTER_CS = 0x0
[ 9148.130619]    # vmread(0x482E) failed
[ 9148.130620]    # RFLAGS: 0x242
[ 9148.130621]  # GUEST_PREEMTION_TIMER          INVALID_VALUE
[ 9148.130623]  # HOST_IA32_SYSENTER_CS = 0x10
[ 9148.130625]  # CR0_MASK = 0xfffffffffffffff0
[ 9148.130628]  # CR4_MASK = 0xfffffffffffff871
[ 9148.130630]  # CR0_READ_SHADOW = 0x60000010
[ 9148.130632]  # CR4_READ_SHADOW = 0x10
[ 9148.130634]  # CR3_TARGET_0 = 0x0
[ 9148.130636]  # CR3_TARGET_1 = 0x7cf7c000
[ 9148.130638]  # CR3_TARGET_2 = 0x0
[ 9148.130640]  # CR3_TARGET_3 = 0x0
[ 9148.130641]  # EXIT_QUALIFICATION = 0x0
[ 9148.130642]  # IO_RCX = 0x0
[ 9148.130643]  # IO_RSI = 0x0
[ 9148.130644]  # IO_RDI = 0x0
[ 9148.130645]  # IO_RIP = 0x0
[ 9148.130646]  # GUEST_LINEAR_ADDR = 0x0
[ 9148.130648]  # GUEST_CR0 = 0x31
[ 9148.130649]  # GUEST_CR3 = 0x0
[ 9148.130650]  # GUEST_CR4 = 0x2050
[ 9148.130651]  # GUEST_ES_BASE = 0x0
[ 9148.130652]  # GUEST_CS_BASE = 0x0
[ 9148.130653]  # GUEST_SS_BASE = 0x0
[ 9148.130654]  # GUEST_DS_BASE = 0x0
[ 9148.130655]  # GUEST_FS_BASE = 0x0
[ 9148.130656]  # GUEST_GS_BASE = 0x0
[ 9148.130657]  # GUEST_LDTR_BASE = 0x0
[ 9148.130658]  # GUEST_TR_BASE = 0x0
[ 9148.130659]  # GUEST_GDTR_BASE = 0x7c58
[ 9148.130660]  # GUEST_IDTR_BASE = 0x0
[ 9148.130662]  # GUEST_DR7 = 0x400
[ 9148.130663]  # GUEST_RSP = 0x7bfa
[ 9148.130664]  # GUEST_RIP = 0x7c45
[ 9148.130665]  # GUEST_RFLAGS = 0x6
[ 9148.130666]  # GUEST_PENDING_DEBUG_EXCEPT = 0x0
[ 9148.130667]  # GUEST_IA32_SYSENTER_ESP = 0x0
[ 9148.130668]  # GUEST_IA32_SYSENTER_EIP = 0x0
[ 9148.130670]  # HOST_CR0 = 0x80050033
[ 9148.130673]  # HOST_CR3 = 0x7cf7c000
[ 9148.130675]  # HOST_CR4 = 0x362670
[ 9148.130677]  # HOST_FS_BASE = 0x7fd81a6e3700
[ 9148.130679]  # HOST_GS_BASE = 0xffff8800ba680000
[ 9148.130681]  # HOST_TR_BASE = 0xffff8800ba6848c0
[ 9148.130683]  # HOST_GDTR_BASE = 0xffff8800ba68c000
[ 9148.130686]  # HOST_IDTR_BASE = 0xffffffffff574000
[ 9148.130688]  # HOST_IA32_SYSENTER_ESP = 0x0
[ 9148.130690]  # HOST_IA32_SYSENTER_EIP = 0xffffffff81852720
[ 9148.130692]  # HOST_RSP = 0xffff88006b833de0
[ 9148.130694]  # HOST_RIP = 0xffffffffc05b85d5
[ 9148.130697]  # (null) = 0x0

I checked the fields with ch 26.3, but could NOT find any hint. Please shine your lights on it.

linux
x86
virtualization
asked on Stack Overflow May 5, 2018 by wangt13 • edited May 6, 2018 by jww

1 Answer

3

FS ATTR and GS ATTR are invalid. See the checks on “Access-rights fields” in 26.3.1.2. If bit 16 is 0, then bits 7:0 must be non-zero, typically 0x93.

answered on Stack Overflow May 5, 2018 by prl

User contributions licensed under CC BY-SA 3.0