• Sean Christopherson's avatar
    KVM: nVMX: Emulate guest TLB flush on nested VM-Enter with new vpid12 · 712494de
    Sean Christopherson authored
    Fully emulate a guest TLB flush on nested VM-Enter which changes vpid12,
    i.e. L2's VPID, instead of simply doing INVVPID to flush real hardware's
    TLB entries for vpid02.  From L1's perspective, changing L2's VPID is
    effectively a TLB flush unless "hardware" has previously cached entries
    for the new vpid12.  Because KVM tracks only a single vpid12, KVM doesn't
    know if the new vpid12 has been used in the past and so must treat it as
    a brand new, never been used VPID, i.e. must assume that the new vpid12
    represents a TLB flush from L1's perspective.
    
    For example, if L1 and L2 share a CR3, the first VM-Enter to L2 (with a
    VPID) is effectively a TLB flush as hardware/KVM has never seen vpid12
    and thus can't have cached entries in the TLB for vpid12.
    Reported-by: default avatarLai Jiangshan <jiangshanlai+lkml@gmail.com>
    Fixes: 5c614b35 ("KVM: nVMX: nested VPID emulation")
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
    Message-Id: <20211125014944.536398-3-seanjc@google.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    712494de
nested.c 206 KB