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);
 
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to