KVM: guest_memfd: limit overzealous WARN
Because kvm_gmem_get_pfn() is called from the page fault path without any of the slots_lock, filemap lock or mmu_lock taken, it is possible for it to race with kvm_gmem_unbind(). This is not a problem, as any PTE that is installed temporarily will be zapped before the guest has the occasion to run. However, it is not possible to have a complete unbind+bind racing with the page fault, because deleting the memslot will call synchronize_srcu_expedited() and wait for the page fault to be resolved. Thus, we can still warn if the file is there and is not the one we expect. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>pull/815/merge
parent
7062372377
commit
fa30b0dc91
|
|
@ -499,7 +499,8 @@ int kvm_gmem_get_pfn(struct kvm *kvm, struct kvm_memory_slot *slot,
|
||||||
|
|
||||||
gmem = file->private_data;
|
gmem = file->private_data;
|
||||||
|
|
||||||
if (WARN_ON_ONCE(xa_load(&gmem->bindings, index) != slot)) {
|
if (xa_load(&gmem->bindings, index) != slot) {
|
||||||
|
WARN_ON_ONCE(xa_load(&gmem->bindings, index));
|
||||||
r = -EIO;
|
r = -EIO;
|
||||||
goto out_fput;
|
goto out_fput;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue