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-zfcpdumpUpgrade kernel-debug-modulesUpgrade kernel-debug-coreUpgrade kernel-tools-libsUpgrade kernel-rt-debugUpgrade kernel-rt-debug-coreUpgrade kernel-rt-modules-extraUpgrade kernelUpgrade kernel-modules-extraUpgrade kernel-cross-headersUpgrade kernel-zfcpdump-modulesUpgrade kernel-debug-modules-extraUpgrade kernel-zfcpdump-modules-extraUpgrade kernel-rt-develUpgrade kernel-rt-debug-modulesUpgrade kernel-debugUpgrade bpftoolUpgrade kernel-coreUpgrade kernel-docUpgrade kernel-abi-stablelistsUpgrade kernel-headersUpgrade kernel-rt-coreUpgrade kernel-zfcpdump-develUpgrade kernel-debug-develUpgrade kernel-rt-modulesUpgrade kernel-rt-debug-develUpgrade kernel-zfcpdump-coreUpgrade python3-perfUpgrade kernel-rt-debug-modules-extraUpgrade perfUpgrade kernel-rtUpgrade kernel-modulesUpgrade kernel-tools-libs-develUpgrade kernel-toolsUpgrade kernel-devel | Nov 7, 2024 | May 1, 2024 |
| Amazon Linux Ami 2 | — | Upgrade kernel-toolsUpgrade python-perf-debuginfoUpgrade perfUpgrade kernel-debuginfo-common-x86_64Upgrade kernel-headersUpgrade perf-debuginfoUpgrade python-perfUpgrade kernel-livepatch-4.14.345-262.561Upgrade kernelUpgrade bpftool-debuginfoUpgrade kernel-livepatch-5.15.156-102.160Upgrade kernel-livepatch-5.10.215-203.850Upgrade kernel-develUpgrade kernel-debuginfoUpgrade kernel-tools-develUpgrade kernel-tools-debuginfoUpgrade bpftoolUpgrade kernel-debuginfo-common-aarch64 | Aug 14, 2024 | May 1, 2024 |
| Amazon_linux | — | Upgrade kernel | Aug 1, 2024 | May 1, 2024 |
| Amazon_linux_2023 | — | Upgrade python3-perfUpgrade kernel-livepatch-6.1.84-99.169Upgrade kernel-modules-extra-commonUpgrade kernel-toolsUpgrade kernel-debuginfo-common-aarch64Upgrade perfUpgrade perf-debuginfoUpgrade kernel-tools-develUpgrade kernel-headersUpgrade kernel-libbpf-staticUpgrade kernel-debuginfo-common-x86_64Upgrade kernel-develUpgrade kernelUpgrade kernel-libbpfUpgrade kernel-debuginfoUpgrade bpftool-debuginfoUpgrade python3-perf-debuginfoUpgrade kernel-modules-extraUpgrade bpftoolUpgrade kernel-tools-debuginfoUpgrade kernel-libbpf-devel | Feb 17, 2025 | May 1, 2024 |
| Debian | — | Upgrade linux | May 8, 2024 | May 1, 2024 |
| Huawei Euleros 2_0_sp10 | — | Upgrade python3-perfUpgrade kernelUpgrade kernel-abi-stablelistsUpgrade kernel-tools-libsUpgrade kernel-tools | Jul 16, 2024 | May 1, 2024 |
| Huawei Euleros 2_0_sp11 | — | Upgrade python3-perfUpgrade kernel-abi-stablelistsUpgrade kernel-tools-libsUpgrade kernel-toolsUpgrade kernelUpgrade bpftool | Oct 8, 2024 | May 1, 2024 |
| Huawei Euleros 2_0_sp12 | — | Upgrade bpftoolUpgrade python3-perfUpgrade kernelUpgrade kernel-tools-libsUpgrade kernel-toolsUpgrade kernel-abi-stablelists | Oct 8, 2024 | May 1, 2024 |
| Huawei Euleros 2_0_sp8 | — | Upgrade kernelUpgrade kernel-tools-libsUpgrade python-perfUpgrade kernel-headersUpgrade kernel-develUpgrade bpftoolUpgrade python3-perfUpgrade perfUpgrade kernel-tools | Jan 21, 2025 | May 1, 2024 |
| Huawei Euleros 2_0_sp9 | — | Upgrade kernel-toolsUpgrade python3-perfUpgrade kernelUpgrade kernel-tools-libs | Jul 17, 2024 | May 1, 2024 |
| Oracle_linux | — | Upgrade kernel | Nov 11, 2024 | May 1, 2024 |
| Redhat_linux | — | Upgrade kernelUpgrade kernel-rtNo solution exists | Nov 6, 2024 | May 1, 2024 |
| Rocky_linux | — | Upgrade kernel-rtUpgrade kernel-debug-debuginfoUpgrade kernel-debug-modules-extraUpgrade kernel-coreUpgrade kernel-modulesUpgrade python3-perf-debuginfoUpgrade kernel-rt-modulesUpgrade kernel-debug-modulesUpgrade kernel-tools-libsUpgrade kernel-debuginfo-common-x86_64Upgrade kernel-rt-debuginfoUpgrade kernel-toolsUpgrade kernel-rt-debug-modulesUpgrade kernel-rt-debug-coreUpgrade kernel-rt-debug-debuginfoUpgrade bpftool-debuginfoUpgrade kernel-headersUpgrade kernel-modules-extraUpgrade kernel-rt-debuginfo-common-x86_64Upgrade perfUpgrade perf-debuginfoUpgrade python3-perfUpgrade kernel-rt-debug-kvmUpgrade kernel-debuginfoUpgrade kernel-develUpgrade kernel-rt-debugUpgrade kernel-rt-coreUpgrade kernel-cross-headersUpgrade kernel-rt-debug-develUpgrade kernel-rt-modules-extraUpgrade kernel-rt-kvmUpgrade kernelUpgrade kernel-tools-libs-develUpgrade kernel-rt-develUpgrade kernel-rt-debug-modules-extraUpgrade kernel-debug-develUpgrade kernel-debugUpgrade bpftoolUpgrade kernel-tools-debuginfoUpgrade kernel-debug-core | Nov 19, 2024 | May 1, 2024 |
| Suse | — | Upgrade ocfs2-kmp-defaultUpgrade cluster-md-kmp-rtUpgrade kernel-sourceUpgrade dtb-lgUpgrade kernel-64kb-develUpgrade kernel-devel-rtUpgrade kernel-source-azureUpgrade kernel-default-livepatchUpgrade reiserfs-kmp-defaultUpgrade dtb-sprdUpgrade dtb-alteraUpgrade kernel-azureUpgrade reiserfs-kmp-azureUpgrade kernel-rt_debug-livepatch-develUpgrade kernel-debugUpgrade kernel-azure-optionalUpgrade dlm-kmp-rtUpgrade dtb-allwinnerUpgrade cluster-md-kmp-azureUpgrade dlm-kmp-64kbUpgrade dtb-renesasUpgrade dtb-xilinxUpgrade kernel-64kbUpgrade dtb-mediatekUpgrade cluster-md-kmp-64kbUpgrade kernel-develUpgrade dtb-freescaleUpgrade kernel-rt_debug-develUpgrade kernel-64kb-extraUpgrade kernel-obs-buildUpgrade kernel-source-vanillaUpgrade kernel-rt-develUpgrade ocfs2-kmp-azureUpgrade dtb-amazonUpgrade kernel-rt-extraUpgrade kernel-syms-azureUpgrade kselftests-kmp-64kbUpgrade kernel-default-vdsoUpgrade kernel-debug-vdsoUpgrade dtb-caviumUpgrade gfs2-kmp-azureUpgrade dtb-qcomUpgrade ocfs2-kmp-64kbUpgrade dtb-exynosUpgrade kernel-default-optionalUpgrade dtb-rockchipUpgrade kernel-rt-livepatchUpgrade dtb-hisiliconUpgrade gfs2-kmp-defaultUpgrade kernel-default-base-rebuildUpgrade kernel-default-develUpgrade kernel-rtUpgrade kselftests-kmp-azureUpgrade kernel-default-manUpgrade kernel-rt-vdsoUpgrade kernel-symsUpgrade kernel-debug-livepatch-develUpgrade kernel-default-baseUpgrade ocfs2-kmp-rtUpgrade kernel-default-livepatch-develUpgrade kernel-defaultUpgrade kernel-64kb-optionalUpgrade kernel-syms-rtUpgrade kernel-rt-livepatch-develUpgrade kernel-azure-develUpgrade kernel-rt_debugUpgrade kernel-kvmsmall-livepatch-develUpgrade kernel-docsUpgrade kernel-azure-extraUpgrade dtb-armUpgrade kernel-macrosUpgrade kernel-azure-livepatch-develUpgrade kernel-rt_debug-vdsoUpgrade dtb-socionextUpgrade dtb-nvidiaUpgrade kernel-docs-htmlUpgrade dlm-kmp-azureUpgrade gfs2-kmp-rtUpgrade kselftests-kmp-rtUpgrade kernel-azure-vdsoUpgrade kernel-debug-develUpgrade kernel-kvmsmall-vdsoUpgrade kernel-kvmsmallUpgrade reiserfs-kmp-64kbUpgrade kernel-64kb-livepatch-develUpgrade dtb-amdUpgrade kernel-zfcpdumpUpgrade kernel-devel-azureUpgrade dtb-apmUpgrade cluster-md-kmp-defaultUpgrade reiserfs-kmp-rtUpgrade kselftests-kmp-defaultUpgrade kernel-rt-optionalUpgrade dtb-marvellUpgrade dtb-appleUpgrade dtb-amlogicUpgrade dlm-kmp-defaultUpgrade kernel-obs-qaUpgrade kernel-kvmsmall-develUpgrade gfs2-kmp-64kbUpgrade kernel-source-rtUpgrade kernel-default-extraUpgrade dtb-broadcom | Aug 14, 2024 | May 1, 2024 |
| Ubuntu | — | Upgrade linux-image-5.4.0-1133-azureUpgrade linux-image-5.15.0-1065-gcpUpgrade linux-image-5.15.0-1060-intel-iotgUpgrade linux-image-virtualUpgrade linux-image-6.8.0-1006-oemUpgrade linux-image-generic-hwe-24.04Upgrade linux-image-6.8.0-1006-oracleUpgrade linux-image-gkeUpgrade linux-image-oem-osp1Upgrade linux-image-azure-lts-22.04Upgrade linux-image-5.15.0-116-generic-64kUpgrade linux-image-oem-20.04cUpgrade linux-image-raspi-hwe-18.04Upgrade linux-image-snapdragon-hwe-18.04Upgrade linux-image-6.8.0-35-lowlatencyUpgrade linux-image-5.15.0-1060-nvidia-lowlatencyUpgrade linux-image-5.4.0-1088-bluefieldUpgrade linux-image-generic-64k-hwe-20.04Upgrade linux-image-gcpUpgrade linux-image-lowlatency-hwe-18.04Upgrade linux-image-generic-lpaeUpgrade linux-image-genericUpgrade linux-image-virtual-hwe-24.04Upgrade linux-image-oem-20.04Upgrade linux-image-5.15.0-1058-raspiUpgrade linux-image-gkeop-5.4Upgrade linux-image-6.8.0-1004-gkeUpgrade linux-image-5.4.0-1127-oracleUpgrade linux-image-oem-20.04dUpgrade linux-image-gkeop-5.15Upgrade linux-image-gcp-lts-20.04Upgrade linux-image-raspi2Upgrade linux-image-oemUpgrade linux-image-intel-iotgUpgrade linux-image-xilinx-zynqmpUpgrade linux-image-5.15.0-1035-xilinx-zynqmpUpgrade linux-image-oracle-lts-22.04Upgrade linux-image-5.15.0-1068-azure-fdeUpgrade linux-image-generic-lpae-hwe-20.04Upgrade linux-image-oem-24.04aUpgrade linux-image-azure-fde-lts-22.04Upgrade linux-image-6.8.0-35-lowlatency-64kUpgrade linux-image-virtual-hwe-18.04Upgrade linux-image-gkeopUpgrade linux-image-6.8.0-1008-azure-fdeUpgrade linux-image-generic-hwe-18.04Upgrade linux-image-5.15.0-116-genericUpgrade linux-image-oracleUpgrade linux-image-intelUpgrade linux-image-5.15.0-1058-ibmUpgrade linux-image-6.8.0-1009-awsUpgrade linux-image-5.15.0-1068-azureUpgrade linux-image-bluefieldUpgrade linux-image-oem-24.04Upgrade linux-image-azure-lts-20.04Upgrade linux-image-lowlatency-64kUpgrade linux-image-oracle-64kUpgrade linux-image-azure-cvmUpgrade linux-image-generic-64k-hwe-24.04Upgrade linux-image-raspi-nolpaeUpgrade linux-image-gcp-lts-22.04Upgrade linux-image-6.8.0-1008-gcpUpgrade linux-image-azureUpgrade linux-image-ibm-lts-24.04Upgrade linux-image-oracle-lts-20.04Upgrade linux-image-5.4.0-1116-kvmUpgrade linux-image-ibmUpgrade linux-image-virtual-hwe-20.04Upgrade linux-image-5.4.0-189-generic-lpaeUpgrade linux-image-5.4.0-1112-raspiUpgrade linux-image-5.4.0-1040-iotUpgrade linux-image-5.15.0-1063-oracleUpgrade linux-image-generic-hwe-20.04Upgrade linux-image-6.8.0-1005-raspiUpgrade linux-image-aws-lts-22.04Upgrade linux-image-5.15.0-1065-awsUpgrade linux-image-5.15.0-116-lowlatencyUpgrade linux-image-5.15.0-1062-gkeUpgrade linux-image-5.4.0-1075-ibmUpgrade linux-image-oem-20.04bUpgrade linux-image-lowlatencyUpgrade linux-image-6.8.0-1006-oracle-64kUpgrade linux-image-5.15.0-1060-nvidiaUpgrade linux-image-6.8.0-1008-azureUpgrade linux-image-5.15.0-1064-gcpUpgrade linux-image-nvidiaUpgrade linux-image-kvmUpgrade linux-image-raspiUpgrade linux-image-5.4.0-1132-gcpUpgrade linux-image-nvidia-lowlatencyUpgrade linux-image-6.8.0-1006-ibmUpgrade linux-image-5.15.0-1048-gkeopUpgrade linux-image-lowlatency-64k-hwe-20.04Upgrade linux-image-5.4.0-1047-xilinx-zynqmpUpgrade linux-image-azure-fdeUpgrade linux-image-5.4.0-1128-awsUpgrade linux-image-5.15.0-1062-kvmUpgrade linux-image-5.4.0-189-lowlatencyUpgrade linux-image-ibm-lts-20.04Upgrade linux-image-aws-lts-20.04Upgrade linux-image-5.15.0-116-lowlatency-64kUpgrade linux-image-5.4.0-189-genericUpgrade linux-image-generic-64kUpgrade linux-image-ibm-classicUpgrade linux-image-6.8.0-35-genericUpgrade linux-image-5.4.0-1095-gkeopUpgrade linux-image-6.8.0-35-generic-64kUpgrade linux-image-lowlatency-hwe-20.04Upgrade linux-image-awsUpgrade linux-image-5.15.0-116-generic-lpaeUpgrade linux-image-gke-5.15 | 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