diff options
author | Xiao Guangrong <xiaoguangrong@linux.vnet.ibm.com> | 2012-08-21 04:58:13 +0200 |
---|---|---|
committer | Avi Kivity <avi@redhat.com> | 2012-08-22 14:08:50 +0200 |
commit | a50d64d6590f470b712758598a077ef4fd0fc40a (patch) | |
tree | 4e673d5f51e95e00c218abec66f8cccb9fa8664b /virt/kvm/kvm_main.c | |
parent | KVM: x86: fix possible infinite loop caused by reexecute_instruction (diff) | |
download | linux-a50d64d6590f470b712758598a077ef4fd0fc40a.tar.xz linux-a50d64d6590f470b712758598a077ef4fd0fc40a.zip |
KVM: fix missing check for memslot flags
Check flags when memslot is registered from userspace as Avi's suggestion
Signed-off-by: Xiao Guangrong <xiaoguangrong@linux.vnet.ibm.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'virt/kvm/kvm_main.c')
-rw-r--r-- | virt/kvm/kvm_main.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index a2e85af847c1..7b94d70a323f 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -678,6 +678,14 @@ void update_memslots(struct kvm_memslots *slots, struct kvm_memory_slot *new) slots->generation++; } +static int check_memory_region_flags(struct kvm_userspace_memory_region *mem) +{ + if (mem->flags & ~KVM_MEM_LOG_DIRTY_PAGES) + return -EINVAL; + + return 0; +} + /* * Allocate some memory and give it an address in the guest physical address * space. @@ -698,6 +706,10 @@ int __kvm_set_memory_region(struct kvm *kvm, struct kvm_memory_slot old, new; struct kvm_memslots *slots, *old_memslots; + r = check_memory_region_flags(mem); + if (r) + goto out; + r = -EINVAL; /* General sanity checks */ if (mem->memory_size & (PAGE_SIZE - 1)) |