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