diff options
author | Nitin A Kamble <nitin.a.kamble@intel.com> | 2007-09-15 03:43:33 -0400 |
---|---|---|
committer | Avi Kivity <avi@qumranet.com> | 2007-10-13 04:18:29 -0400 |
commit | 12fa272e315af43d549ce22f9988392d0121350e (patch) | |
tree | 9b2f33c44ac6b48b05e74f6243b8d6ff73d161f2 /drivers/kvm | |
parent | 26a3e983d154beca544afd36f293cfef10657f24 (diff) |
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>
Diffstat (limited to 'drivers/kvm')
-rw-r--r-- | drivers/kvm/x86_emulate.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/kvm/x86_emulate.c b/drivers/kvm/x86_emulate.c index cf8db670df7f..7360a71094f5 100644 --- a/drivers/kvm/x86_emulate.c +++ b/drivers/kvm/x86_emulate.c | |||
@@ -827,6 +827,7 @@ done_prefixes: | |||
827 | srcmem_common: | 827 | srcmem_common: |
828 | src.type = OP_MEM; | 828 | src.type = OP_MEM; |
829 | src.ptr = (unsigned long *)cr2; | 829 | src.ptr = (unsigned long *)cr2; |
830 | src.val = 0; | ||
830 | if ((rc = ops->read_emulated((unsigned long)src.ptr, | 831 | if ((rc = ops->read_emulated((unsigned long)src.ptr, |
831 | &src.val, src.bytes, ctxt->vcpu)) != 0) | 832 | &src.val, src.bytes, ctxt->vcpu)) != 0) |
832 | goto done; | 833 | goto done; |
@@ -891,6 +892,7 @@ done_prefixes: | |||
891 | dst.type = OP_MEM; | 892 | dst.type = OP_MEM; |
892 | dst.ptr = (unsigned long *)cr2; | 893 | dst.ptr = (unsigned long *)cr2; |
893 | dst.bytes = (d & ByteOp) ? 1 : op_bytes; | 894 | dst.bytes = (d & ByteOp) ? 1 : op_bytes; |
895 | dst.val = 0; | ||
894 | if (d & BitOp) { | 896 | if (d & BitOp) { |
895 | unsigned long mask = ~(dst.bytes * 8 - 1); | 897 | unsigned long mask = ~(dst.bytes * 8 - 1); |
896 | 898 | ||