• Sean Christopherson's avatar
    Revert "KVM: Prevent module exit until all VMs are freed" · ea61294b
    Sean Christopherson authored
    Revert KVM's misguided attempt to "fix" a use-after-module-unload bug that
    was actually due to failure to flush a workqueue, not a lack of module
    refcounting.  Pinning the KVM module until kvm_vm_destroy() doesn't
    prevent use-after-free due to the module being unloaded, as userspace can
    invoke delete_module() the instant the last reference to KVM is put, i.e.
    can cause all KVM code to be unmapped while KVM is actively executing said
    code.
    
    Generally speaking, the many instances of module_put(THIS_MODULE)
    notwithstanding, outside of a few special paths, a module can never safely
    put the last reference to itself without creating deadlock, i.e. something
    external to the module *must* put the last reference.  In other words,
    having VMs grab a reference to the KVM module is futile, pointless, and as
    evidenced by the now-reverted commit 70375c2d ("Revert "KVM: set owner
    of cpu and vm file operations""), actively dangerous.
    
    This reverts commit 405294f2 and commit
    5f6de5cb.
    
    Fixes: 405294f2 ("KVM: Unconditionally get a ref to /dev/kvm module when creating a VM")
    Fixes: 5f6de5cb ("KVM: Prevent module exit until all VMs are freed")
    Link: https://lore.kernel.org/r/20231018204624.1905300-4-seanjc@google.comSigned-off-by: default avatarSean Christopherson <seanjc@google.com>
    ea61294b
kvm_main.c 156 KB