FAILED: patch "[PATCH] KVM: Register /dev/kvm as the _very_ last thing during" failed to apply to 5.4-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 5.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-5.4.y
git checkout FETCH_HEAD
git cherry-pick -x 2b01281273738bf2d6551da48d65db2df3f28998
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '[email protected]' --subject-prefix 'PATCH 5.4.y' HEAD^..
Possible dependencies:
2b0128127373 ("KVM: Register /dev/kvm as the _very_ last thing during initialization") baff59ccdc65 ("KVM: Pre-allocate cpumasks for kvm_make_all_cpus_request_except()") ae0946cd3601 ("KVM: Optimize kvm_make_vcpus_request_mask() a bit")0bbc2ca8515f ("KVM: KVM: Use cpumask_available() to check for NULL cpumask when kicking vCPUs") 85b640450ddc ("KVM: Clean up benign vcpu->cpu data races when kicking vCPUs") e649b3f0188f ("KVM: x86: Fix APIC page invalidation race")54163a346d4a ("KVM: Introduce kvm_make_all_cpus_request_except()")db5a95ec166f ("KVM: x86: remove set but not used variable 'called'") 7ee30bc132c6 ("KVM: x86: deliver KVM IOAPIC scan request to target vCPUs")
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 2b01281273738bf2d6551da48d65db2df3f28998 Mon Sep 17 00:00:00 2001
From: Sean Christopherson <[email protected]>
Date: Wed, 30 Nov 2022 23:08:45 +0000
Subject: [PATCH] KVM: Register /dev/kvm as the _very_ last thing during
initialization
Register /dev/kvm, i.e. expose KVM to userspace, only after all other setup has completed. Once /dev/kvm is exposed, userspace can start invoking KVM ioctls, creating VMs, etc... If userspace creates a VM before KVM is done with its configuration, bad things may happen, e.g. KVM will fail to properly migrate vCPU state if a VM is created before KVM has registered preemption notifiers.
Message-Id: <[email protected]>
virt/kvm/kvm_main.c +22 -9
@@ -5988,12 +5988,6 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align, kvm_chardev_ops.owner = module; - r =misc_register (&kvm_dev); -if (r) { -pr_err ("kvm: misc device register failed\n" ); - goto out_unreg; - } -register_syscore_ops (&kvm_syscore_ops); kvm_preempt_ops.sched_in = kvm_sched_in;
@@ -6002,11 +5996,24 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align,kvm_init_debug (); r =kvm_vfio_ops_init (); -WARN_ON (r); +if (WARN_ON_ONCE (r)) + goto err_vfio; + +/* +* Registration _must_ be the very last thing done, as this exposes +* /dev/kvm to userspace, i.e. all infrastructure must be setup! +*/ + r =misc_register (&kvm_dev); +if (r) { +pr_err ("kvm: misc device register failed\n" ); + goto err_register; + }return 0 ; -out_unreg: +err_register: +kvm_vfio_ops_exit (); +err_vfio:kvm_async_pf_deinit (); out_free_4:for_each_possible_cpu (cpu)
@@ -6032,8 +6039,14 @@ void kvm_exit(void) {int cpu; -debugfs_remove_recursive (kvm_debugfs_dir); +/* +* Note, unregistering /dev/kvm doesn't strictly need to come first, +* fops_get(), a.k.a. try_module_get(), prevents acquiring references +* to KVM while the module is being stopped. +*/ misc_deregister (&kvm_dev); + +debugfs_remove_recursive (kvm_debugfs_dir);for_each_possible_cpu (cpu)free_cpumask_var (per_cpu (cpu_kick_mask, cpu));kmem_cache_destroy (kvm_vcpu_cache);