lkml.org 
[lkml]   [2020]   [Jul]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 084/109] KVM: x86: Inject #GP if guest attempts to toggle CR4.LA57 in 64-bit mode
    Date
    From: Sean Christopherson <sean.j.christopherson@intel.com>

    commit d74fcfc1f0ff4b6c26ecef1f9e48d8089ab4eaac upstream.

    Inject a #GP on MOV CR4 if CR4.LA57 is toggled in 64-bit mode, which is
    illegal per Intel's SDM:

    CR4.LA57
    57-bit linear addresses (bit 12 of CR4) ... blah blah blah ...
    This bit cannot be modified in IA-32e mode.

    Note, the pseudocode for MOV CR doesn't call out the fault condition,
    which is likely why the check was missed during initial development.
    This is arguably an SDM bug and will hopefully be fixed in future
    release of the SDM.

    Fixes: fd8cb433734ee ("KVM: MMU: Expose the LA57 feature to VM.")
    Cc: stable@vger.kernel.org
    Reported-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
    Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com>
    Message-Id: <20200703021714.5549-1-sean.j.christopherson@intel.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    arch/x86/kvm/x86.c | 2 ++
    1 file changed, 2 insertions(+)

    --- a/arch/x86/kvm/x86.c
    +++ b/arch/x86/kvm/x86.c
    @@ -980,6 +980,8 @@ int kvm_set_cr4(struct kvm_vcpu *vcpu, u
    if (is_long_mode(vcpu)) {
    if (!(cr4 & X86_CR4_PAE))
    return 1;
    + if ((cr4 ^ old_cr4) & X86_CR4_LA57)
    + return 1;
    } else if (is_paging(vcpu) && (cr4 & X86_CR4_PAE)
    && ((cr4 ^ old_cr4) & pdptr_bits)
    && !load_pdptrs(vcpu, vcpu->arch.walk_mmu,

    \
     
     \ /
      Last update: 2020-07-14 21:07    [W:4.077 / U:0.076 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site