• Sean Christopherson's avatar
    KVM: x86/mmu: Move root_hpa validity checks to top of page fault handler · ddce6208
    Sean Christopherson authored
    Add a check on root_hpa at the beginning of the page fault handler to
    consolidate several checks on root_hpa that are scattered throughout the
    page fault code.  This is a preparatory step towards eventually removing
    such checks altogether, or at the very least WARNing if an invalid root
    is encountered.  Remove only the checks that can be easily audited to
    confirm that root_hpa cannot be invalidated between their current
    location and the new check in kvm_mmu_page_fault(), and aren't currently
    protected by mmu_lock, i.e. keep the checks in __direct_map() and
    FNAME(fetch) for the time being.
    
    The root_hpa checks that are consolidate were all added by commit
    
      37f6a4e2 ("KVM: x86: handle invalid root_hpa everywhere")
    
    which was a follow up to a bug fix for __direct_map(), commit
    
      989c6b34 ("KVM: MMU: handle invalid root_hpa at __direct_map")
    
    At the time, nested VMX had, in hindsight, crazy handling of nested
    interrupts and would trigger a nested VM-Exit in ->interrupt_allowed(),
    and thus unexpectedly reset the MMU in flows such as can_do_async_pf().
    
    Now that the wonky nested VM-Exit behavior is gone, the root_hpa checks
    are bogus and confusing, e.g. it's not at all obvious what they actually
    protect against, and at first glance they appear to be broken since many
    of them run without holding mmu_lock.
    Signed-off-by: default avatarSean Christopherson <sean.j.christopherson@intel.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    ddce6208
mmu.c 170 KB