• Vitaly Kuznetsov's avatar
    KVM: VMX: fix crash cleanup when KVM wasn't used · dbef2808
    Vitaly Kuznetsov authored
    If KVM wasn't used at all before we crash the cleanup procedure fails with
     BUG: unable to handle page fault for address: ffffffffffffffc8
     #PF: supervisor read access in kernel mode
     #PF: error_code(0x0000) - not-present page
     PGD 23215067 P4D 23215067 PUD 23217067 PMD 0
     Oops: 0000 [#8] SMP PTI
     CPU: 0 PID: 3542 Comm: bash Kdump: loaded Tainted: G      D           5.6.0-rc2+ #823
     RIP: 0010:crash_vmclear_local_loaded_vmcss.cold+0x19/0x51 [kvm_intel]
    
    The root cause is that loaded_vmcss_on_cpu list is not yet initialized,
    we initialize it in hardware_enable() but this only happens when we start
    a VM.
    
    Previously, we used to have a bitmap with enabled CPUs and that was
    preventing [masking] the issue.
    
    Initialized loaded_vmcss_on_cpu list earlier, right before we assign
    crash_vmclear_loaded_vmcss pointer. blocked_vcpu_on_cpu list and
    blocked_vcpu_on_cpu_lock are moved altogether for consistency.
    
    Fixes: 31603d4f ("KVM: VMX: Always VMCLEAR in-use VMCSes during crash with kexec support")
    Signed-off-by: default avatarVitaly Kuznetsov <vkuznets@redhat.com>
    Message-Id: <20200401081348.1345307-1-vkuznets@redhat.com>
    Reviewed-by: default avatarSean Christopherson <sean.j.christopherson@intel.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    dbef2808
vmx.c 222 KB