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