具有无效控制字段的VM条目(vmlaunch)

时间:2018-03-13 01:35:33

标签: linux virtualization

我正在使用基于Linux的VMM学习英特尔VMX 我找到了' vmlaunch'指令失败,vm指令错误为7 我检查了英特尔的SDM,这意味着“无效控制字段的虚拟机进入”# 我仔细检查了VM_entry_control,VM_exit_control,VM_exec_control,但找不到任何错误。 我正在使用EPTP执行VM(VM处于实模式)。 以下是控制字段和VMX功能。 主机CPU信息如下 Linux内核是3.10和4.4.0。


    processor       : 1
    vendor_id       : GenuineIntel
    cpu family      : 6
    model           : 63
    model name      : Intel(R) Xeon(R) CPU E5-2620 v3 @ 2.40GHz
    stepping        : 2
    microcode       : 0x37
    cpu MHz         : 2391.223
    cache size      : 15360 KB
    fpu             : yes
    fpu_exception   : yes
    cpuid level     : 13
    wp              : yes
    
<pre>
 0x0000001F = control_VMX_pin_based
 0xA50061F2 = control_VMX_cpu_based
 0x00000082 = control_VMX_proc2_based
 0x00000000 = control_exception_bitmap
 0x00000000 = control_pagefault_errorcode_mask
 0xFFFFFFFF = control_pagefault_errorcode_match
 0x00000002 = control_CR3_target_count
 0x00036FFB = control_VM_exit_controls
 0x000011FB = control_VM_entry_controls
 0x00000000 = control_VM_entry_interruption_information
 0x00000000 = control_VM_entry_exception_errorcode
 0x00000000 = control_VM_entry_instruction_length

 0x0000000000000020 = control_CR0_mask
 0x0000000000002000 = control_CR4_mask
 0x0000000000000020 = control_CR0_shadow
 0x0000000000002000 = control_CR4_shadow
 0x0000000000000000 = control_CR3_target0
 0x0000000124FCE000 = control_CR3_target1
 0x0000000000000000 = control_CR3_target2
 0x0000000000000000 = control_CR3_target3

主机VMX功能如下,

 VMX-Capability Model-Specific Registers

     00D8100000000001 = IA32_VMX_BASIC_MSR
     0000003F00000016 = IA32_VMX_PINBASED_CTLS_MSR
     FFF9FFFE0401E172 = IA32_VMX_PROCBASED_CTLS_MSR
     0033FFFF00036DFF = IA32_VMX_EXIT_CTLS_MSR
     0000B3FF000011FF = IA32_VMX_ENTRY_CTLS_MSR
     00000000000401E0 = IA32_VMX_MISC_MSR
     0000000080000021 = IA32_VMX_CR0_FIXED0_MSR
     00000000FFFFFFFF = IA32_VMX_CR0_FIXED1_MSR
     0000000000002000 = IA32_VMX_CR4_FIXED0_MSR
     00000000000427FF = IA32_VMX_CR4_FIXED1_MSR
     000000000000005A = IA32_VMX_VMCS_ENUM_MSR
     000000EE00000000 = IA32_VMX_PROCBASED_CTLS2
     00000F0106114041 = IA32_VMX_EPT_VPID_CAP
     0000003F00000016 = IA32_VMX_TRUE_PINBASED_CTLS
     FFF9FFFE04006172 = IA32_VMX_TRUE_PROCBASED_CTLS
     0033FFFF00036DFB = IA32_VMX_TRUE_EXIT_CTLS
     0000B3FF000011FB = IA32_VMX_TRUE_ENTRY_CTLS

2 个答案:

答案 0 :(得分:1)

我在您提供的字段中没有看到任何错误,但是对未列出的字段进行了更多检查。例如,使用MSR位图为1,但不显示MSR位图地址的值。

您应该完成第26.2.1节中的所有检查。

我建议您查看与无限制客人相关的任何检查。建议您在退出和输入控件中设置控件以保存和恢复EFER。

答案 1 :(得分:1)

通过检查VMCS字段,我发现无效控件来自EPTP 在那个CPU中,它不支持“脏/访问”。 EPTP中的位为1(位6) 将该位设置为0后,没有“无效”控制字段&#39;错误。