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