KVM: fix sil/dil/bpl/spl in the mod/rm fields
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>
This commit is contained in:
Родитель
103f98ea64
Коммит
8acb42070e
|
@ -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;
|
||||
|
|
Загрузка…
Ссылка в новой задаче