• Sean Christopherson's avatar
    KVM: x86: Update emulator context mode if SYSENTER xfers to 64-bit mode · 943dea8a
    Sean Christopherson authored
    Set the emulator context to PROT64 if SYSENTER transitions from 32-bit
    userspace (compat mode) to a 64-bit kernel, otherwise the RIP update at
    the end of x86_emulate_insn() will incorrectly truncate the new RIP.
    
    Note, this bug is mostly limited to running an Intel virtual CPU model on
    an AMD physical CPU, as other combinations of virtual and physical CPUs
    do not trigger full emulation.  On Intel CPUs, SYSENTER in compatibility
    mode is legal, and unconditionally transitions to 64-bit mode.  On AMD
    CPUs, SYSENTER is illegal in compatibility mode and #UDs.  If the vCPU is
    AMD, KVM injects a #UD on SYSENTER in compat mode.  If the pCPU is Intel,
    SYSENTER will execute natively and not trigger #UD->VM-Exit (ignoring
    guest TLB shenanigans).
    
    Fixes: fede8076 ("KVM: x86: handle wrap around 32-bit address space")
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarJonny Barker <jonny@jonnybarker.com>
    [sean: wrote changelog]
    Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
    Message-Id: <20210202165546.2390296-1-seanjc@google.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    943dea8a
emulate.c 152 KB