• Sean Christopherson's avatar
    KVM: x86/mmu: Retry page faults that hit an invalid memslot · e0c37868
    Sean Christopherson authored
    Retry page faults (re-enter the guest) that hit an invalid memslot
    instead of treating the memslot as not existing, i.e. handling the
    page fault as an MMIO access.  When deleting a memslot, SPTEs aren't
    zapped and the TLBs aren't flushed until after the memslot has been
    marked invalid.
    
    Handling the invalid slot as MMIO means there's a small window where a
    page fault could replace a valid SPTE with an MMIO SPTE.  The legacy
    MMU handles such a scenario cleanly, but the TDP MMU assumes such
    behavior is impossible (see the BUG() in __handle_changed_spte()).
    There's really no good reason why the legacy MMU should allow such a
    scenario, and closing this hole allows for additional cleanups.
    
    Fixes: 2f2fad08 ("kvm: x86/mmu: Add functions to handle changed TDP SPTEs")
    Cc: Ben Gardon <bgardon@google.com>
    Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
    Message-Id: <20210225204749.1512652-6-seanjc@google.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    e0c37868
mmu.c 157 KB