mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-16 22:10:24 +00:00
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:
parent
26a3e983d1
commit
12fa272e31
@ -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);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user