Skip to content

Commit

Permalink
KVM: fix sil/dil/bpl/spl in the mod/rm fields
Browse files Browse the repository at this point in the history
The x86-64 extended low-byte registers were fetched correctly from reg,
but not from mod/rm.

This fixes another bug in the boot of RHEL5.9 64-bit, but it is still
not enough.

Cc: <stable@vger.kernel.org> # 3.9
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Gleb Natapov <gleb@redhat.com>
  • Loading branch information
Paolo Bonzini authored and Gleb Natapov committed Jun 3, 2013
1 parent 103f98e commit 8acb420
Showing 1 changed file with 4 additions and 1 deletion.
5 changes: 4 additions & 1 deletion arch/x86/kvm/emulate.c
Original file line number Diff line number Diff line change
Expand Up @@ -1240,9 +1240,12 @@ static int decode_modrm(struct x86_emulate_ctxt *ctxt,
ctxt->modrm_seg = VCPU_SREG_DS;

if (ctxt->modrm_mod == 3) {
int highbyte_regs = ctxt->rex_prefix == 0;

op->type = OP_REG;
op->bytes = (ctxt->d & ByteOp) ? 1 : ctxt->op_bytes;
op->addr.reg = decode_register(ctxt, ctxt->modrm_rm, ctxt->d & ByteOp);
op->addr.reg = decode_register(ctxt, ctxt->modrm_rm,
highbyte_regs && (ctxt->d & ByteOp));
if (ctxt->d & Sse) {
op->type = OP_XMM;
op->bytes = 16;
Expand Down

0 comments on commit 8acb420

Please sign in to comment.