On Tue, Aug 16, 2022 at 05:39:36AM +0000, Sean Christopherson wrote: > Unconditionally get a reference to the /dev/kvm module when creating a VM > instead of using try_get_module(), which will fail if the module is in > the process of being forcefully unloaded. The error handling when > try_get_module() fails doesn't properly unwind all that has been done, > e.g. doesn't call kvm_arch_pre_destroy_vm() and doesn't remove the VM > from the global list. Not removing VMs from the global list tends to be > fatal, e.g. leads to use-after-free explosions. > > The obvious alternative would be to add proper unwinding, but the > justification for using try_get_module(), "rmmod --wait", is completely > bogus as support for "rmmod --wait", i.e. delete_module() without > O_NONBLOCK, was removed by commit 3f2b9c9cdf38 ("module: remove rmmod > --wait option.") nearly a decade ago. Ah! include/linux/module.h may also need a cleanup then. The comment above __module_get() explicitly mentions "rmmod --wait", which is what led me to use try_module_get() for commit 5f6de5cbebee ("KVM: Prevent module exit until all VMs are freed").