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

标签 linux virtualization

我正在使用基于 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/

相关文章:

linux - apache https 配置问题

Redhat 6 上的 CPU 利用率

android - 像平行空间一样运行多个android应用程序实例

installation - 如何为 .NET 开发设置 virtualbox

linux - 挂起进程和 Linux 系统调用 248?

linux - 使用 sed 将代码块附加到 my.cnf

从bind()收到的C++ errno 22

c++ - 即使每个语句都是 "SELECT",SQLite3 是否会更改数据库

android - 我收到此错误 "your cpu doesn' t 支持 vt-x 或 svm,AMD 6300 处理器中的 android studio 2.1.1”

elasticsearch - 用于 Elasticsearch Multi-Tenancy SaaS 或单实例和代理的 Docker?