summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--virt/kvm/kvm_main.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index 3caf8162eb6..e4d358195e5 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -784,13 +784,19 @@ int __kvm_set_memory_region(struct kvm *kvm,
r = -ENOMEM;
- /* Allocate if a slot is being created */
+ /*
+ * Allocate if a slot is being created. If modifying a slot,
+ * the userspace_addr cannot change.
+ */
if (!old.npages) {
new.user_alloc = user_alloc;
new.userspace_addr = mem->userspace_addr;
if (kvm_arch_create_memslot(&new, npages))
goto out_free;
+ } else if (npages && mem->userspace_addr != old.userspace_addr) {
+ r = -EINVAL;
+ goto out_free;
}
/* Allocate page dirty bitmap if needed */