• Wanpeng Li's avatar
    KVM: X86: Fix operand/address-size during instruction decoding · 3853be26
    Wanpeng Li authored
    Pedro reported:
      During tests that we conducted on KVM, we noticed that executing a "PUSH %ES"
      instruction under KVM produces different results on both memory and the SP
      register depending on whether EPT support is enabled. With EPT the SP is
      reduced by 4 bytes (and the written value is 0-padded) but without EPT support
      it is only reduced by 2 bytes. The difference can be observed when the CS.DB
      field is 1 (32-bit) but not when it's 0 (16-bit).
    
    The internal segment descriptor cache exist even in real/vm8096 mode. The CS.D
    also should be respected instead of just default operand/address-size/66H
    prefix/67H prefix during instruction decoding. This patch fixes it by also
    adjusting operand/address-size according to CS.D.
    Reported-by: default avatarPedro Fonseca <pfonseca@cs.washington.edu>
    Tested-by: default avatarPedro Fonseca <pfonseca@cs.washington.edu>
    Cc: Paolo Bonzini <pbonzini@redhat.com>
    Cc: Radim Krčmář <rkrcmar@redhat.com>
    Cc: Nadav Amit <nadav.amit@gmail.com>
    Cc: Pedro Fonseca <pfonseca@cs.washington.edu>
    Signed-off-by: default avatarWanpeng Li <wanpeng.li@hotmail.com>
    Reviewed-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: default avatarRadim Krčmář <rkrcmar@redhat.com>
    3853be26
emulate.c 147 KB