• Michael Roth's avatar
    KVM: MMU: Disable fast path if KVM_EXIT_MEMORY_FAULT is needed · b74d002d
    Michael Roth authored
    
    
    For hardware-protected VMs like SEV-SNP guests, certain conditions like
    attempting to perform a write to a page which is not in the state that
    the guest expects it to be in can result in a nested/extended #PF which
    can only be satisfied by the host performing an implicit page state
    change to transition the page into the expected shared/private state.
    This is generally handled by generating a KVM_EXIT_MEMORY_FAULT event
    that gets forwarded to userspace to handle via
    KVM_SET_MEMORY_ATTRIBUTES.
    
    However, the fast_page_fault() code might misconstrue this situation as
    being the result of a write-protected access, and treat it as a spurious
    case when it sees that writes are already allowed for the sPTE. This
    results in the KVM MMU trying to resume the guest rather than taking any
    action to satisfy the real source of the #PF such as generating a
    KVM_EXIT_MEMORY_FAULT, resulting in the guest spinning on nested #PFs.
    
    Check for this condition and bail out of the fast path if it is
    detected.
    Suggested-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    Suggested-by: default avatarSean Christopherson <seanjc@google.com>
    Cc: Isaku Yamahata <isaku.yamahata@intel.com>
    Reviewed-by: default avatarIsaku Yamahata <isaku.yamahata@intel.com>
    Signed-off-by: default avatarMichael Roth <michael.roth@amd.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    b74d002d
mmu.c 210 KB