我正在使用基于 Linux 的 VMM 学习 Intel VMX。
我发现“vmlaunch”指令失败,vm 指令错误为 7。
我检查了Intel的SDM,它的意思是“具有无效控制字段的VM条目”。
我仔细检查了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
最佳答案
我没有发现您提供的字段有任何问题,但对您未列出的字段进行了更多检查。例如,Use MSR bitmap 为 1,但不显示 MSR 位图地址的值。
您应该完成第 26.2.1 节中的所有检查。
我建议还查看与不受限制的访客相关的任何检查。建议您在退出和进入控件中设置保存和恢复EFER的控件。
关于linux - 具有无效控制字段的 VM 条目 (vmlaunch),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49246983/