svn commit: r255638 - head/sys/amd64/vmm
Neel Natu
neel at FreeBSD.org
Tue Sep 17 16:06:07 UTC 2013
Author: neel
Date: Tue Sep 17 16:06:07 2013
New Revision: 255638
URL: http://svnweb.freebsd.org/changeset/base/255638
Log:
Fix a bug in decoding an instruction that has an SIB byte as well as an
immediate operand. The presence of an SIB byte in decoding the ModR/M field
would cause 'imm_bytes' to not be set to the correct value.
Fix this by initializing 'imm_bytes' independent of the ModR/M decoding.
Reported by: grehan@
Approved by: re@
Modified:
head/sys/amd64/vmm/vmm_instruction_emul.c
Modified: head/sys/amd64/vmm/vmm_instruction_emul.c
==============================================================================
--- head/sys/amd64/vmm/vmm_instruction_emul.c Tue Sep 17 15:19:26 2013 (r255637)
+++ head/sys/amd64/vmm/vmm_instruction_emul.c Tue Sep 17 16:06:07 2013 (r255638)
@@ -701,12 +701,6 @@ decode_modrm(struct vie *vie)
break;
}
- /* Figure out immediate operand size (if any) */
- if (vie->op.op_flags & VIE_OP_F_IMM)
- vie->imm_bytes = 4;
- else if (vie->op.op_flags & VIE_OP_F_IMM8)
- vie->imm_bytes = 1;
-
done:
vie_advance(vie);
@@ -822,6 +816,12 @@ decode_immediate(struct vie *vie)
int32_t signed32;
} u;
+ /* Figure out immediate operand size (if any) */
+ if (vie->op.op_flags & VIE_OP_F_IMM)
+ vie->imm_bytes = 4;
+ else if (vie->op.op_flags & VIE_OP_F_IMM8)
+ vie->imm_bytes = 1;
+
if ((n = vie->imm_bytes) == 0)
return (0);
More information about the svn-src-head
mailing list