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-all mailing list