Messages in this thread Patch in this message | | | Subject | [PATCH] KVM: fix mov immediate emulation for 64-bit operands | From | Nadav Amit <> | Date | Sat, 7 Jan 2012 22:21:35 +0200 |
| |
MOV immediate instruction (opcodes 0xB8-0xBF) may take 64-bit operand. The previous emulation implementation assumes the operand is no longer than 32.
Signed-off-by: Nadav Amit <nadav.amit@gmail.com> --- arch/x86/kvm/emulate.c | 6 +++++- 1 files changed, 5 insertions(+), 1 deletions(-)
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c index 05a562b..65d1d31 100644 --- a/arch/x86/kvm/emulate.c +++ b/arch/x86/kvm/emulate.c @@ -3502,7 +3502,8 @@ static unsigned imm_size(struct x86_emulate_ctxt *ctxt) unsigned size;
size = (ctxt->d & ByteOp) ? 1 : ctxt->op_bytes; - if (size == 8) + /* Immediates are usually no longer than 4 bytes */ + if (size == 8 && ((ctxt->b & 0xF8) != 0xB8 || ctxt->twobyte)) size = 4; return size; } @@ -3526,6 +3527,9 @@ static int decode_imm(struct x86_emulate_ctxt *ctxt, struct operand *op, case 4: op->val = insn_fetch(s32, ctxt); break; + case 8: + op->val = insn_fetch(s64, ctxt); + break; } if (!sign_extension) { switch (op->bytes) { -- 1.7.4.1
| |