From c9bdd0aa6800459009b99568adc57ee9cf6f9bda Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Wed, 2 Mar 2022 12:35:36 -0500 Subject: [PATCH] KVM: allow struct kvm to outlive the file descriptors Right now, the kvm module is kept alive by VFS via fops_get/fops_put, but there may be cases in which a kvm_get_kvm's matching kvm_put_kvm happens after the file descriptor is closed. One case that will be introduced soon is when work is delegated to the system work queue; the worker might be a bit late and the file descriptor can be closed in the meantime. Ensure that the module has not gone away by tying a module reference explicitly to the lifetime of the struct kvm. Signed-off-by: Paolo Bonzini --- virt/kvm/kvm_main.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 64eb99444688f..e3f37fc2ebf15 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -1131,6 +1131,9 @@ static struct kvm *kvm_create_vm(unsigned long type) preempt_notifier_inc(); kvm_init_pm_notifier(kvm); + /* This is safe, since we have a reference from open(). */ + __module_get(THIS_MODULE); + return kvm; out_err: @@ -1220,6 +1223,7 @@ static void kvm_destroy_vm(struct kvm *kvm) preempt_notifier_dec(); hardware_disable_all(); mmdrop(mm); + module_put(THIS_MODULE); } void kvm_get_kvm(struct kvm *kvm) -- 2.50.1