diff options
Diffstat (limited to 'virt/kvm/kvm_main.c')
| -rw-r--r-- | virt/kvm/kvm_main.c | 15 | 
1 files changed, 9 insertions, 6 deletions
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 22cdb960660..96ebc067941 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -467,12 +467,8 @@ static struct kvm *kvm_create_vm(void)  		if (!kvm->buses[i])  			goto out_err;  	} -	spin_lock_init(&kvm->mmu_lock); - -	r = kvm_init_mmu_notifier(kvm); -	if (r) -		goto out_err; +	spin_lock_init(&kvm->mmu_lock);  	kvm->mm = current->mm;  	atomic_inc(&kvm->mm->mm_count);  	kvm_eventfd_init(kvm); @@ -480,6 +476,11 @@ static struct kvm *kvm_create_vm(void)  	mutex_init(&kvm->irq_lock);  	mutex_init(&kvm->slots_lock);  	atomic_set(&kvm->users_count, 1); + +	r = kvm_init_mmu_notifier(kvm); +	if (r) +		goto out_err; +  	raw_spin_lock(&kvm_lock);  	list_add(&kvm->vm_list, &vm_list);  	raw_spin_unlock(&kvm_lock); @@ -651,7 +652,9 @@ int __kvm_set_memory_region(struct kvm *kvm,  	/* We can read the guest memory with __xxx_user() later on. */  	if (user_alloc &&  	    ((mem->userspace_addr & (PAGE_SIZE - 1)) || -	     !access_ok(VERIFY_WRITE, mem->userspace_addr, mem->memory_size))) +	     !access_ok(VERIFY_WRITE, +			(void __user *)(unsigned long)mem->userspace_addr, +			mem->memory_size)))  		goto out;  	if (mem->slot >= KVM_MEMORY_SLOTS + KVM_PRIVATE_MEM_SLOTS)  		goto out;  |