Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 17 Sep 2013 16:06:07 +0000 (UTC)
From:      Neel Natu <neel@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r255638 - head/sys/amd64/vmm
Message-ID:  <201309171606.r8HG67Ot032544@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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);
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201309171606.r8HG67Ot032544>