• Kevin Wolf's avatar
    KVM: x86 emulator: Fix segment loading in VM86 · f8da94e9
    Kevin Wolf authored
    This fixes a regression introduced in commit 03ebebeb ("KVM: x86
    emulator: Leave segment limit and attributs alone in real mode").
    
    The mentioned commit changed the segment descriptors for both real mode
    and VM86 to only update the segment base instead of creating a
    completely new descriptor with limit 0xffff so that unreal mode keeps
    working across a segment register reload.
    
    This leads to an invalid segment descriptor in the eyes of VMX, which
    seems to be okay for real mode because KVM will fix it up before the
    next VM entry or emulate the state, but it doesn't do this if the guest
    is in VM86, so we end up with:
    
      KVM: entry failed, hardware error 0x80000021
    
    Fix this by effectively reverting commit 03ebebeb for VM86 and leaving
    it only in place for real mode, which is where it's really needed.
    Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
    Signed-off-by: default avatarGleb Natapov <gleb@redhat.com>
    f8da94e9
emulate.c 125 KB