KVM: x86 emulator: fix src, dst value initialization

Some operand fetches are less than the machine word size and can result in
stale bits if used together with operands of different sizes.

Signed-off-by: Nitin A Kamble <nitin.a.kamble@intel.com>
Signed-off-by: Avi Kivity <avi@qumranet.com>
This commit is contained in:
Nitin A Kamble 2007-09-15 10:43:33 +03:00 committed by Avi Kivity
parent 26a3e983d1
commit 12fa272e31

View File

@ -827,6 +827,7 @@ done_prefixes:
srcmem_common: srcmem_common:
src.type = OP_MEM; src.type = OP_MEM;
src.ptr = (unsigned long *)cr2; src.ptr = (unsigned long *)cr2;
src.val = 0;
if ((rc = ops->read_emulated((unsigned long)src.ptr, if ((rc = ops->read_emulated((unsigned long)src.ptr,
&src.val, src.bytes, ctxt->vcpu)) != 0) &src.val, src.bytes, ctxt->vcpu)) != 0)
goto done; goto done;
@ -891,6 +892,7 @@ done_prefixes:
dst.type = OP_MEM; dst.type = OP_MEM;
dst.ptr = (unsigned long *)cr2; dst.ptr = (unsigned long *)cr2;
dst.bytes = (d & ByteOp) ? 1 : op_bytes; dst.bytes = (d & ByteOp) ? 1 : op_bytes;
dst.val = 0;
if (d & BitOp) { if (d & BitOp) {
unsigned long mask = ~(dst.bytes * 8 - 1); unsigned long mask = ~(dst.bytes * 8 - 1);