Re: [PATCH] KVM: fix rcu warning on VM_CREATE errors

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 13.09.2017 14:17, Christian Borntraeger wrote:
> commit 3898da947bba ("KVM: avoid using rcu_dereference_protected") can
> trigger the following lockdep/rcu splat if the VM_CREATE ioctl fails,
> for example if kvm_arch_init_vm fails:
> 
> WARNING: suspicious RCU usage
> 4.13.0+ #105 Not tainted
> -----------------------------
> ./include/linux/kvm_host.h:481 suspicious rcu_dereference_check() usage!
> 
> other info that might help us debug this:
> 
> rcu_scheduler_active = 2, debug_locks = 1
> no locks held by qemu-system-s39/79.
> stack backtrace:
> CPU: 0 PID: 79 Comm: qemu-system-s39 Not tainted 4.13.0+ #105
> Hardware name: IBM 2964 NC9 704 (KVM/Linux)
> Call Trace:
> ([<00000000001140b2>] show_stack+0xea/0xf0)
>  [<00000000008a68a4>] dump_stack+0x94/0xd8
>  [<0000000000134c12>] kvm_dev_ioctl+0x372/0x7a0
>  [<000000000038f940>] do_vfs_ioctl+0xa8/0x6c8
>  [<0000000000390004>] SyS_ioctl+0xa4/0xb8
>  [<00000000008c7a8c>] system_call+0xc4/0x27c
> no locks held by qemu-system-s39/79.
> 
> We have to reset the just created users_count back to 0 to
> tell the check to not trigger.
> 
> Reported-by: Stefan Haberland <sth@xxxxxxxxxxxxxxxxxx>
> Signed-off-by: Christian Borntraeger <borntraeger@xxxxxxxxxx>
> Fixes: 3898da947bba ("KVM: avoid using rcu_dereference_protected")
> Cc: Paolo Bonzini <pbonzini@xxxxxxxxxx>
> ---
>  virt/kvm/kvm_main.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
> index 1b3fa3f..1205d20 100644
> --- a/virt/kvm/kvm_main.c
> +++ b/virt/kvm/kvm_main.c
> @@ -716,6 +716,7 @@ static struct kvm *kvm_create_vm(unsigned long type)
>  out_err_no_srcu:
>  	hardware_disable_all();
>  out_err_no_disable:
> +	refcount_set(&kvm->users_count, 0);
>  	for (i = 0; i < KVM_NR_BUSES; i++)
>  		kfree(kvm_get_bus(kvm, i));
>  	for (i = 0; i < KVM_ADDRESS_SPACE_NUM; i++)
> 

Makes sense to me.

Reviewed-by: David Hildenbrand <david@xxxxxxxxxx>

-- 

Thanks,

David



[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux