• Jim Mattson's avatar
    KVM: nVMX: Fix memory corruption when using VMCS shadowing · c8483104
    Jim Mattson authored
    commit 2f1fe811 upstream.
    
    When freeing the nested resources of a vcpu, there is an assumption that
    the vcpu's vmcs01 is the current VMCS on the CPU that executes
    nested_release_vmcs12(). If this assumption is violated, the vcpu's
    vmcs01 may be made active on multiple CPUs at the same time, in
    violation of Intel's specification. Moreover, since the vcpu's vmcs01 is
    not VMCLEARed on every CPU on which it is active, it can linger in a
    CPU's VMCS cache after it has been freed and potentially
    repurposed. Subsequent eviction from the CPU's VMCS cache on a capacity
    miss can result in memory corruption.
    
    It is not sufficient for vmx_free_vcpu() to call vmx_load_vmcs01(). If
    the vcpu in question was last loaded on a different CPU, it must be
    migrated to the current CPU before calling vmx_load_vmcs01().
    Signed-off-by: default avatarJim Mattson <jmattson@google.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    [bwh: Backported to 3.2: vcpu_load() returns void]
    Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
    c8483104
kvm_main.c 62.9 KB