forked from Minki/linux
KVM: x86 emulator: fix xchg instruction emulation
If the destination is a memory operand and the memory cannot map to a valid page, the xchg instruction emulation and locked instruction will not work on io regions and stuck in endless loop. We should emulate exchange as write to fix it. Signed-off-by: Wei Yongjun <yjwei@cn.fujitsu.com> Acked-by: Gleb Natapov <gleb@redhat.com> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
This commit is contained in:
parent
9195c4da26
commit
c19b8bd60e
@ -3562,6 +3562,10 @@ static int emulator_cmpxchg_emulated(unsigned long addr,
|
||||
goto emul_write;
|
||||
|
||||
page = gfn_to_page(vcpu->kvm, gpa >> PAGE_SHIFT);
|
||||
if (is_error_page(page)) {
|
||||
kvm_release_page_clean(page);
|
||||
goto emul_write;
|
||||
}
|
||||
|
||||
kaddr = kmap_atomic(page, KM_USER0);
|
||||
kaddr += offset_in_page(gpa);
|
||||
|
Loading…
Reference in New Issue
Block a user