具有无效控制字段的虚拟机条目 (vmlaunch)



我正在使用基于 Linux 的 VMM 学习英特尔 VMX。
我发现"vmlaunch"指令失败,vm 指令错误为 7。
我检查了英特尔的 SDM,它表示"具有无效控制字段的 VM 条目"。
我仔细检查了VM_entry_control、VM_exit_control、VM_exec_control,但没有发现任何问题。 我正在使用 EPTP 执行虚拟机(虚拟机处于实模式)。 下面是控制字段和 VMX 功能。 主机 CPU 信息如下。
Linux 内核是 3.10 和 4.4.0。

处理器 : 1 vendor_id : 正版英特尔 中央处理器系列 : 6 型号 : 63 型号名称 : 英特尔® 至强® CPU E5-2620 v3 @ 2.40GHz 步进 : 2 微码 : 0x37 中央处理器兆赫 : 2391.223 缓存大小 : 15360 KB FPU : 是 fpu_exception : 是 中央处理器级别 : 13 WP : 是的
<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 功能模型的寄存器  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  000000000FFFFFFFF = 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

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

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

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

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

最新更新