In the Linux kernel, the following vulnerability has been resolved:
KVM: Always flush async #PF workqueue when vCPU is being destroyed
Always flush the per-vCPU async #PF workqueue when a vCPU is clearing its completion queue, e.g. when a VM and all its vCPUs is being destroyed. KVM must ensure that none of its workqueue callbacks is running when the last reference to the KVM _module_ is put. Gifting a reference to the associated VM prevents the workqueue callback from dereferencing freed vCPU/VM memory, but does not prevent the KVM module from being unloaded before the callback completes.
Drop the misguided VM refcount gifting, as calling kvm_put_kvm() from async_pf_execute() if kvm_put_kvm() flushes the async #PF workqueue will result in deadlock. async_pf_execute() can't return until kvm_put_kvm() finishes, and kvm_put_kvm() can't return until async_pf_execute() finishes:
WARNING: CPU: 8 PID: 251 at virt/kvm/kvm_main.c:1435 kvm_put_kvm+0x2d/0x320 [kvm] Modules linked in: vhost_net vhost vhost_iotlb tap kvm_intel kvm irqbypass CPU: 8 PID: 251 Comm: kworker/8:1 Tainted: G W 6.6.0-rc1-e7af8d17224a-x86/gmem-vm #119 Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 0.0.0 02/06/2015 Workqueue: events async_pf_execute [kvm] RIP: 0010:kvm_put_kvm+0x2d/0x320 [kvm] Call Trace: <TASK> async_pf_execute+0x198/0x260 [kvm] process_one_work+0x145/0x2d0 worker_thread+0x27e/0x3a0 kthread+0xba/0xe0 ret_from_fork+0x2d/0x50 ret_from_fork_asm+0x11/0x20 </TASK> ---[ end trace 0000000000000000 ]--- INFO: task kworker/8:1:251 blocked for more than 120 seconds. Tainted: G W 6.6.0-rc1-e7af8d17224a-x86/gmem-vm #119 "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. task:kworker/8:1 state:D stack:0 pid:251 ppid:2 flags:0x00004000 Workqueue: events async_pf_execute [kvm] Call Trace: <TASK> __schedule+0x33f/0xa40 schedule+0x53/0xc0 schedule_timeout+0x12a/0x140 __wait_for_common+0x8d/0x1d0 __flush_work.isra.0+0x19f/0x2c0 kvm_clear_async_pf_completion_queue+0x129/0x190 [kvm] kvm_arch_destroy_vm+0x78/0x1b0 [kvm] kvm_put_kvm+0x1c1/0x320 [kvm] async_pf_execute+0x198/0x260 [kvm] process_one_work+0x145/0x2d0 worker_thread+0x27e/0x3a0 kthread+0xba/0xe0 ret_from_fork+0x2d/0x50 ret_from_fork_asm+0x11/0x20 </TASK>
If kvm_clear_async_pf_completion_queue() actually flushes the workqueue, then there's no need to gift async_pf_execute() a reference because all invocations of async_pf_execute() will be forced to complete before the vCPU and its VM are destroyed/freed. And that in turn fixes the module unloading bug as __fput() won't do module_put() on the last vCPU reference until the vCPU has been freed, e.g. if closing the vCPU file also puts the last reference to the KVM module.
Note that kvm_check_async_pf_completion() may also take the work item off the completion queue and so also needs to flush the work queue, as the work will not be seen by kvm_clear_async_pf_completion_queue(). Waiting on the workqueue could theoretically delay a vCPU due to waiting for the work to complete, but that's a very, very small chance, and likely a very small delay. kvm_arch_async_page_present_queued() unconditionally makes a new request, i.e. will effectively delay entering the guest, so the remaining work is really just:
trace_kvm_async_pf_completed(addr, cr2_or_gpa);
__kvm_vcpu_wake_up(vcpu);
mmput(mm);
and mmput() can't drop the last reference to the page tables if the vCPU is still alive, i.e. the vCPU won't get stuck tearing down page tables.
Add a helper to do the flushing, specifically to deal with "wakeup all" work items, as they aren't actually work items, i.e. are never placed in a workqueue. Trying to flush a bogus workqueue entry rightly makes __flush_work() complain (kudos to whoever added that sanity check).
Note, commit 5f6de5cbebee ("KVM: Prevent module exit until al ---truncated---
CVSS Details
- CVSS 3.1 Base Score: 7.8
- CVSS 3.1 Vector: (CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H)
Covered by Rapid7
| Product | Vendor Advisory | Solution File | Added | Published |
|---|---|---|---|---|
| Alma_linux | — | Upgrade kernel-rt-coreUpgrade kernel-headersUpgrade kernel-zfcpdump-develUpgrade kernel-docUpgrade kernel-tools-libs-develUpgrade kernel-rtUpgrade kernel-develUpgrade kernel-rt-debug-develUpgrade kernel-rt-modulesUpgrade kernel-abi-stablelistsUpgrade kernel-zfcpdump-coreUpgrade kernel-toolsUpgrade kernel-modulesUpgrade kernel-debug-develUpgrade kernel-rt-debug-modules-extraUpgrade python3-perfUpgrade perfUpgrade kernelUpgrade kernel-debug-modulesUpgrade kernel-rt-debug-modulesUpgrade kernel-zfcpdump-modules-extraUpgrade kernel-rt-debugUpgrade kernel-cross-headersUpgrade kernel-debugUpgrade kernel-rt-debug-coreUpgrade kernel-modules-extraUpgrade kernel-coreUpgrade kernel-zfcpdumpUpgrade kernel-rt-modules-extraUpgrade kernel-zfcpdump-modulesUpgrade kernel-debug-modules-extraUpgrade bpftoolUpgrade kernel-rt-develUpgrade kernel-tools-libsUpgrade kernel-debug-core | Nov 7, 2024 | May 1, 2024 |
| Amazon Linux Ami 2 | — | Upgrade kernelUpgrade kernel-headersUpgrade python-perf-debuginfoUpgrade perfUpgrade kernel-toolsUpgrade kernel-livepatch-4.14.345-262.561Upgrade python-perfUpgrade perf-debuginfoUpgrade kernel-debuginfo-common-x86_64Upgrade bpftool-debuginfoUpgrade kernel-develUpgrade kernel-livepatch-5.10.215-203.850Upgrade bpftoolUpgrade kernel-tools-debuginfoUpgrade kernel-livepatch-5.15.156-102.160Upgrade kernel-debuginfoUpgrade kernel-debuginfo-common-aarch64Upgrade kernel-tools-devel | Aug 14, 2024 | May 1, 2024 |
| Amazon_linux | — | Upgrade kernel | Aug 1, 2024 | May 1, 2024 |
| Amazon_linux_2023 | — | Upgrade perf-debuginfoUpgrade kernel-toolsUpgrade perfUpgrade kernel-headersUpgrade kernel-debuginfo-common-aarch64Upgrade kernel-tools-develUpgrade kernel-livepatch-6.1.84-99.169Upgrade python3-perfUpgrade kernel-modules-extra-commonUpgrade python3-perf-debuginfoUpgrade kernel-libbpf-staticUpgrade kernel-debuginfo-common-x86_64Upgrade bpftoolUpgrade kernel-libbpf-develUpgrade kernel-modules-extraUpgrade kernel-tools-debuginfoUpgrade kernel-debuginfoUpgrade bpftool-debuginfoUpgrade kernel-develUpgrade kernelUpgrade kernel-libbpf | Feb 17, 2025 | May 1, 2024 |
| Debian | — | Upgrade linux | May 8, 2024 | May 1, 2024 |
| Huawei Euleros 2_0_sp10 | — | Upgrade python3-perfUpgrade kernel-abi-stablelistsUpgrade kernelUpgrade kernel-toolsUpgrade kernel-tools-libs | Jul 16, 2024 | May 1, 2024 |
| Huawei Euleros 2_0_sp11 | — | Upgrade python3-perfUpgrade kernel-abi-stablelistsUpgrade kernel-tools-libsUpgrade bpftoolUpgrade kernel-toolsUpgrade kernel | Oct 8, 2024 | May 1, 2024 |
| Huawei Euleros 2_0_sp12 | — | Upgrade bpftoolUpgrade python3-perfUpgrade kernel-toolsUpgrade kernel-abi-stablelistsUpgrade kernel-tools-libsUpgrade kernel | Oct 8, 2024 | May 1, 2024 |
| Huawei Euleros 2_0_sp8 | — | Upgrade kernel-headersUpgrade kernelUpgrade kernel-tools-libsUpgrade python-perfUpgrade perfUpgrade kernel-toolsUpgrade bpftoolUpgrade python3-perfUpgrade kernel-devel | Jan 21, 2025 | May 1, 2024 |
| Huawei Euleros 2_0_sp9 | — | Upgrade python3-perfUpgrade kernel-toolsUpgrade kernelUpgrade kernel-tools-libs | Jul 17, 2024 | May 1, 2024 |
| Oracle_linux | — | Upgrade kernel | Nov 11, 2024 | May 1, 2024 |
| Redhat_linux | — | Upgrade kernel-rtNo solution existsUpgrade kernel | Nov 6, 2024 | May 1, 2024 |
| Rocky_linux | — | Upgrade kernel-rt-modules-extraUpgrade kernel-rt-kvmUpgrade kernel-rt-debug-modules-extraUpgrade perf-debuginfoUpgrade kernel-rt-develUpgrade kernel-tools-libs-develUpgrade kernelUpgrade kernel-rt-debugUpgrade kernel-cross-headersUpgrade kernel-rt-coreUpgrade kernel-develUpgrade kernel-debug-develUpgrade kernel-rt-debug-develUpgrade kernel-debug-coreUpgrade kernel-tools-debuginfoUpgrade python3-perfUpgrade kernel-debugUpgrade kernel-debuginfoUpgrade bpftoolUpgrade kernel-rt-debug-kvmUpgrade perfUpgrade kernel-debuginfo-common-x86_64Upgrade kernel-tools-libsUpgrade kernel-modules-extraUpgrade kernel-headersUpgrade bpftool-debuginfoUpgrade kernel-rt-debug-debuginfoUpgrade kernel-rt-debug-coreUpgrade kernel-rtUpgrade kernel-rt-modulesUpgrade kernel-toolsUpgrade kernel-rt-debuginfoUpgrade kernel-rt-debug-modulesUpgrade python3-perf-debuginfoUpgrade kernel-debug-modulesUpgrade kernel-debug-debuginfoUpgrade kernel-modulesUpgrade kernel-debug-modules-extraUpgrade kernel-coreUpgrade kernel-rt-debuginfo-common-x86_64 | Nov 19, 2024 | May 1, 2024 |
| Suse | — | Upgrade kernel-64kb-livepatch-develUpgrade kernel-devel-azureUpgrade reiserfs-kmp-64kbUpgrade dtb-broadcomUpgrade kernel-zfcpdumpUpgrade kernel-default-extraUpgrade kernel-kvmsmall-develUpgrade kernel-symsUpgrade cluster-md-kmp-defaultUpgrade kernel-rt-optionalUpgrade dtb-amdUpgrade dtb-marvellUpgrade kselftests-kmp-defaultUpgrade reiserfs-kmp-rtUpgrade kernel-docsUpgrade dtb-appleUpgrade kernel-macrosUpgrade kernel-kvmsmall-vdsoUpgrade kernel-obs-qaUpgrade kernel-source-rtUpgrade kernel-azure-livepatch-develUpgrade kernel-rt_debug-vdsoUpgrade kernel-azure-extraUpgrade dtb-nvidiaUpgrade kernel-kvmsmallUpgrade kernel-kvmsmall-livepatch-develUpgrade dtb-armUpgrade kernel-debug-livepatch-develUpgrade kernel-azure-vdsoUpgrade kernel-docs-htmlUpgrade dlm-kmp-azureUpgrade gfs2-kmp-rtUpgrade kernel-rt-vdsoUpgrade kernel-syms-rtUpgrade kselftests-kmp-rtUpgrade dtb-socionextUpgrade kernel-default-baseUpgrade kernel-rt_debugUpgrade kernel-debug-develUpgrade kernel-64kb-optionalUpgrade kernel-azure-develUpgrade kernel-rt-livepatch-develUpgrade dlm-kmp-defaultUpgrade dtb-amlogicUpgrade ocfs2-kmp-rtUpgrade kernel-default-livepatch-develUpgrade kernel-default-manUpgrade dtb-apmUpgrade gfs2-kmp-64kbUpgrade kernel-defaultUpgrade kernel-devel-rtUpgrade kernel-azure-optionalUpgrade cluster-md-kmp-64kbUpgrade dtb-rockchipUpgrade dtb-mediatekUpgrade kernel-obs-buildUpgrade kernel-develUpgrade kernel-debugUpgrade dtb-freescaleUpgrade dlm-kmp-64kbUpgrade kernel-rt_debug-develUpgrade reiserfs-kmp-azureUpgrade cluster-md-kmp-rtUpgrade kernel-rt-extraUpgrade kernel-default-optionalUpgrade dtb-qcomUpgrade dtb-caviumUpgrade ocfs2-kmp-azureUpgrade kselftests-kmp-64kbUpgrade kernel-syms-azureUpgrade kernel-source-vanillaUpgrade dtb-alteraUpgrade ocfs2-kmp-defaultUpgrade kernel-azureUpgrade kernel-64kb-develUpgrade kernel-sourceUpgrade kernel-rt_debug-livepatch-develUpgrade dtb-lgUpgrade kernel-debug-vdsoUpgrade gfs2-kmp-azureUpgrade gfs2-kmp-defaultUpgrade dtb-exynosUpgrade ocfs2-kmp-64kbUpgrade kernel-rt-livepatchUpgrade kernel-rtUpgrade kselftests-kmp-azureUpgrade cluster-md-kmp-azureUpgrade kernel-rt-develUpgrade kernel-64kbUpgrade kernel-default-vdsoUpgrade dtb-xilinxUpgrade dtb-renesasUpgrade dtb-amazonUpgrade dtb-allwinnerUpgrade kernel-source-azureUpgrade dtb-sprdUpgrade reiserfs-kmp-defaultUpgrade kernel-default-livepatchUpgrade kernel-default-develUpgrade kernel-default-base-rebuildUpgrade dtb-hisiliconUpgrade dlm-kmp-rtUpgrade kernel-64kb-extra | Aug 14, 2024 | May 1, 2024 |
| Ubuntu | — | Upgrade linux-image-generic-64k-hwe-24.04Upgrade linux-image-5.15.0-116-lowlatencyUpgrade linux-image-ibm-lts-24.04Upgrade linux-image-5.4.0-1095-gkeopUpgrade linux-image-awsUpgrade linux-image-lowlatency-hwe-20.04Upgrade linux-image-gke-5.15Upgrade linux-image-5.4.0-189-generic-lpaeUpgrade linux-image-5.4.0-1112-raspiUpgrade linux-image-5.4.0-1075-ibmUpgrade linux-image-5.15.0-1063-oracleUpgrade linux-image-5.15.0-116-lowlatency-64kUpgrade linux-image-ibm-lts-20.04Upgrade linux-image-5.15.0-1062-kvmUpgrade linux-image-6.8.0-35-genericUpgrade linux-image-5.4.0-1116-kvmUpgrade linux-image-raspiUpgrade linux-image-5.15.0-1064-gcpUpgrade linux-image-5.4.0-1132-gcpUpgrade linux-image-nvidiaUpgrade linux-image-generic-64kUpgrade linux-image-5.15.0-1048-gkeopUpgrade linux-image-aws-lts-20.04Upgrade linux-image-nvidia-lowlatencyUpgrade linux-image-raspi-nolpaeUpgrade linux-image-gcp-lts-22.04Upgrade linux-image-oracle-lts-20.04Upgrade linux-image-lowlatency-64k-hwe-20.04Upgrade linux-image-azureUpgrade linux-image-5.4.0-1047-xilinx-zynqmpUpgrade linux-image-kvmUpgrade linux-image-virtual-hwe-20.04Upgrade linux-image-5.15.0-1065-awsUpgrade linux-image-6.8.0-1006-ibmUpgrade linux-image-5.15.0-1062-gkeUpgrade linux-image-5.4.0-189-genericUpgrade linux-image-lowlatencyUpgrade linux-image-6.8.0-1008-azureUpgrade linux-image-5.4.0-189-lowlatencyUpgrade linux-image-azure-fdeUpgrade linux-image-generic-hwe-20.04Upgrade linux-image-oem-20.04bUpgrade linux-image-6.8.0-1005-raspiUpgrade linux-image-5.15.0-1060-nvidiaUpgrade linux-image-6.8.0-35-generic-64kUpgrade linux-image-aws-lts-22.04Upgrade linux-image-6.8.0-1006-oracle-64kUpgrade linux-image-5.4.0-1128-awsUpgrade linux-image-5.4.0-1040-iotUpgrade linux-image-5.15.0-116-generic-lpaeUpgrade linux-image-ibmUpgrade linux-image-6.8.0-1008-gcpUpgrade linux-image-ibm-classicUpgrade linux-image-5.15.0-1068-azureUpgrade linux-image-virtualUpgrade linux-image-oracleUpgrade linux-image-6.8.0-1006-oracleUpgrade linux-image-5.15.0-1060-nvidia-lowlatencyUpgrade linux-image-5.15.0-1068-azure-fdeUpgrade linux-image-oem-24.04Upgrade linux-image-azure-lts-20.04Upgrade linux-image-bluefieldUpgrade linux-image-lowlatency-64kUpgrade linux-image-oracle-64kUpgrade linux-image-5.15.0-1035-xilinx-zynqmpUpgrade linux-image-5.4.0-1088-bluefieldUpgrade linux-image-raspi-hwe-18.04Upgrade linux-image-snapdragon-hwe-18.04Upgrade linux-image-oem-20.04Upgrade linux-image-genericUpgrade linux-image-6.8.0-35-lowlatencyUpgrade linux-image-5.15.0-116-generic-64kUpgrade linux-image-5.4.0-1133-azureUpgrade linux-image-5.15.0-1058-raspiUpgrade linux-image-oem-20.04dUpgrade linux-image-generic-lpae-hwe-20.04Upgrade linux-image-oracle-lts-22.04Upgrade linux-image-azure-fde-lts-22.04Upgrade linux-image-virtual-hwe-24.04Upgrade linux-image-xilinx-zynqmpUpgrade linux-image-5.4.0-1127-oracleUpgrade linux-image-5.15.0-1060-intel-iotgUpgrade linux-image-gkeop-5.4Upgrade linux-image-6.8.0-1009-awsUpgrade linux-image-lowlatency-hwe-18.04Upgrade linux-image-azure-lts-22.04Upgrade linux-image-generic-hwe-18.04Upgrade linux-image-oem-20.04cUpgrade linux-image-gcp-lts-20.04Upgrade linux-image-intelUpgrade linux-image-5.15.0-1065-gcpUpgrade linux-image-raspi2Upgrade linux-image-5.15.0-116-genericUpgrade linux-image-oemUpgrade linux-image-5.15.0-1058-ibmUpgrade linux-image-virtual-hwe-18.04Upgrade linux-image-gkeUpgrade linux-image-generic-hwe-24.04Upgrade linux-image-gkeop-5.15Upgrade linux-image-intel-iotgUpgrade linux-image-generic-lpaeUpgrade linux-image-oem-osp1Upgrade linux-image-generic-64k-hwe-20.04Upgrade linux-image-6.8.0-1006-oemUpgrade linux-image-gcpUpgrade linux-image-6.8.0-1008-azure-fdeUpgrade linux-image-6.8.0-1004-gkeUpgrade linux-image-azure-cvmUpgrade linux-image-gkeopUpgrade linux-image-oem-24.04aUpgrade linux-image-6.8.0-35-lowlatency-64k | Jul 1, 2024 | May 1, 2024 |
| Vmware Photon_os | — | Use 'tdnf update' to upgrade all packages to the latest version. | Jan 20, 2025 | May 1, 2024 |
Prioritise with Active Threat Intelligence
With curated Threat Intelligence, you can see which vulnerabilities truly put you at risk, prioritize what matters most, and act before attackers do.
Explore Intelligence Hub