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