lkml.org 
[lkml]   [2022]   [Feb]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 01/18] KVM: x86: host-initiated EFER.LME write affects the MMU
    Date
    While the guest runs, EFER.LME cannot change unless CR0.PG is clear, and therefore
    EFER.NX is the only bit that can affect the MMU role. However, set_efer accepts
    a host-initiated change to EFER.LME even with CR0.PG=1. In that case, the
    MMU has to be reset.

    Fixes: 11988499e62b ("KVM: x86: Skip EFER vs. guest CPUID checks for host-initiated writes")
    Cc: stable@vger.kernel.org
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    ---
    arch/x86/kvm/mmu.h | 1 +
    arch/x86/kvm/x86.c | 2 +-
    2 files changed, 2 insertions(+), 1 deletion(-)

    diff --git a/arch/x86/kvm/mmu.h b/arch/x86/kvm/mmu.h
    index 51faa2c76ca5..a5a50cfeffff 100644
    --- a/arch/x86/kvm/mmu.h
    +++ b/arch/x86/kvm/mmu.h
    @@ -48,6 +48,7 @@
    X86_CR4_SMEP | X86_CR4_SMAP | X86_CR4_PKE)

    #define KVM_MMU_CR0_ROLE_BITS (X86_CR0_PG | X86_CR0_WP)
    +#define KVM_MMU_EFER_ROLE_BITS (EFER_LME | EFER_NX)

    static __always_inline u64 rsvd_bits(int s, int e)
    {
    diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
    index d3da64106685..99a58c25f5c2 100644
    --- a/arch/x86/kvm/x86.c
    +++ b/arch/x86/kvm/x86.c
    @@ -1647,7 +1647,7 @@ static int set_efer(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
    }

    /* Update reserved bits */
    - if ((efer ^ old_efer) & EFER_NX)
    + if ((efer ^ old_efer) & KVM_MMU_EFER_ROLE_BITS)
    kvm_mmu_reset_context(vcpu);

    return 0;
    --
    2.31.1

    \
     
     \ /
      Last update: 2022-02-17 22:04    [W:4.658 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site