Skip to content
Fencer Vulns
high 7.8

CVE-2024-26976 json

KVM: Always flush async #PF workqueue when vCPU is being destroyed

published 2024-05-01 2 y ago modified 2026-08-05 3 mo ago also EUVD-2024-24238

cvss
7.8
version 3.1, CNA
cisa kev
Not listed
not in CISA's catalog
epss
0.3%
EPSS 0.3% chance of exploitation in 30 days, percentile 18%
public exploits
0
none known

Summary

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---

Patch / fix

  • Linux Linux 4.19.312, 5.4.274, 5.10.215, 5.15.154, 6.1.84, 6.6.24, 6.7.12, 6.8.3, 6.9
  • linux linux_kernel 3d75b8aa5c29, 4f3a3bce428f, 82e25cc1c2e9, 83d3c5e30961, 8730d6335e5, a75afe480d43, ab2c2f5d9576, b54478d20375, caa9af2e27c2
  • linux Debian 12 6.1.85-1
  • linux Debian 14, Debian 13 6.7.12-1

debian advisories DEBIAN-CVE-2024-26976

  • linux Ubuntu 20.04 LTS 5.4.0-189.209
  • linux Ubuntu 22.04 LTS 5.15.0-116.126
  • linux Ubuntu 24.04 LTS 6.8.0-35.35
  • linux-aws Ubuntu 20.04 LTS 5.4.0-1128.138
  • linux-aws Ubuntu 22.04 LTS 5.15.0-1065.71
  • linux-aws Ubuntu 24.04 LTS 6.8.0-1009.9
  • linux-gcp Ubuntu 20.04 LTS 5.4.0-1132.141
  • linux-gcp Ubuntu 22.04 LTS 5.15.0-1064.72

ubuntu advisories UBUNTU-CVE-2024-26976

Ubuntu security data © Canonical Ltd., from https://github.com/canonical/ubuntu-security-notices via OSV; changed: normalised to fixed package versions per release. CC BY-SA 4.0

  • kernel RHEL 9 5.14.0-503.11.1.el9_5
  • rv RHEL 9 5.14.0-503.11.1.el9_5
  • perf RHEL 9 5.14.0-503.11.1.el9_5
  • rtla RHEL 9 5.14.0-503.11.1.el9_5
  • bpftool RHEL 9 7.4.0-503.11.1.el9_5
  • libperf RHEL 9 5.14.0-503.11.1.el9_5
  • kernel-rt RHEL 9 5.14.0-503.11.1.el9_5
  • kernel-64k RHEL 9 5.14.0-503.11.1.el9_5

red hat advisories RHSA-2025:3510RHSA-2024:9315RHSA-2024:8870RHSA-2024:8856

  • kernel-rt Linux Micro 6.0 6.4.0-10.1
  • kernel-source-rt Linux Micro 6.0 6.4.0-10.1
  • kernel-livepatch-MICRO-6-0-RT_Update_2 Linux Micro 6.0 1-1.1
  • kernel-source Linux Micro 6.0 6.4.0-19.1
  • kernel-default Linux Micro 6.0 6.4.0-19.1
  • kernel-kvmsmall Linux Micro 6.0 6.4.0-19.1
  • kernel-default-base Linux Micro 6.0 6.4.0-17.1.1.51
  • kernel-livepatch-MICRO-6-0_Update_2 Linux Micro 6.0 1-1.1

suse advisories SUSE-SU-2025:20047-1SUSE-SU-2025:20044-1SUSE-SU-2025:0236-1SUSE-SU-2024:3383-1SUSE-SU-2024:3195-1SUSE-SU-2024:3194-1

  • kernel AlmaLinux 8 4.18.0-553.27.1.el8_10
  • perf AlmaLinux 8 4.18.0-553.27.1.el8_10
  • bpftool AlmaLinux 8 4.18.0-553.27.1.el8_10
  • kernel-core AlmaLinux 8 4.18.0-553.27.1.el8_10
  • kernel-tools AlmaLinux 8 4.18.0-553.27.1.el8_10
  • python3-perf AlmaLinux 8 4.18.0-553.27.1.el8_10
  • kernel-modules AlmaLinux 8 4.18.0-553.27.1.el8_10
  • kernel-zfcpdump AlmaLinux 8 4.18.0-553.27.1.el8_10

almalinux advisories ALSA-2024:8856ALSA-2024:8870

  • kernel-rt Rocky Linux 8 4.18.0-553.27.1.rt7.368.el8_10
  • kernel Rocky Linux 8 4.18.0-553.27.1.el8_10

rocky linux advisories RLSA-2024:8870RLSA-2024:8856

Vendor advisories

What the vendors themselves say about their products: affected, fixed or not affected, and what to do.

red hat product security vex CVE-2024-26976 updated cvss 5.5

kernel: KVM: Always flush async #PF workqueue when vCPU is being destroyed

  • Red Hat Enterprise Linux 6 perf, kernel, python-perf, kernel-kdump, kernel-firmware, kernel-bootwrapper, +1 more Red Hat Enterprise Linux 7 perf, kernel, bpftool, kernel-rt, python-perf, kernel-kdump, +8 more
    affected: workaround, no fix planned “Out of support scope”
  • Red Hat CodeReady Linux Builder (v. 9) libperf 5.14.0-503.11.1.el9_5, kernel-debuginfo-common-s390x 5.14.0-503.11.1.el9_5, kernel-debuginfo-common-x86_64 5.14.0-503.11.1.el9_5, kernel-debuginfo-common-aarch64 5.14.0-503.11.1.el9_5, kernel-debuginfo-common-ppc64le 5.14.0-503.11.1.el9_5
    fixed: vendor fix RHSA-2024:9315
  • Red Hat CodeReady Linux Builder EUS (v.9.4) libperf 5.14.0-427.62.1.el9_4, kernel-debuginfo-common-s390x 5.14.0-427.62.1.el9_4, kernel-debuginfo-common-x86_64 5.14.0-427.62.1.el9_4, kernel-debuginfo-common-aarch64 5.14.0-427.62.1.el9_4, kernel-debuginfo-common-ppc64le 5.14.0-427.62.1.el9_4
    fixed: vendor fix RHSA-2025:3510
  • Red Hat Enterprise Linux AppStream (v. 9) rv 5.14.0-503.11.1.el9_5, perf 5.14.0-503.11.1.el9_5, rtla 5.14.0-503.11.1.el9_5, kernel-devel-matched 5.14.0-503.11.1.el9_5, kernel-64k-devel-matched 5.14.0-503.11.1.el9_5, kernel-debug-devel-matched 5.14.0-503.11.1.el9_5, +6 more
    fixed: vendor fix RHSA-2024:9315
  • Red Hat Enterprise Linux AppStream EUS (v.9.4) rv 5.14.0-427.62.1.el9_4, perf 5.14.0-427.62.1.el9_4, rtla 5.14.0-427.62.1.el9_4, kernel-devel-matched 5.14.0-427.62.1.el9_4, kernel-64k-devel-matched 5.14.0-427.62.1.el9_4, kernel-debug-devel-matched 5.14.0-427.62.1.el9_4, +6 more
    fixed: vendor fix RHSA-2025:3510
  • Red Hat Enterprise Linux BaseOS (v. 8) perf 4.18.0-553.27.1.el8_10, kernel 4.18.0-553.27.1.el8_10, bpftool 4.18.0-553.27.1.el8_10, kernel-core 4.18.0-553.27.1.el8_10, kernel-tools 4.18.0-553.27.1.el8_10, python3-perf 4.18.0-553.27.1.el8_10, +15 more
    fixed: vendor fix RHSA-2024:8856
  • Red Hat Enterprise Linux BaseOS (v. 9) bpftool 7.4.0-503.11.1.el9_5, kernel 5.14.0-503.11.1.el9_5, kernel-64k 5.14.0-503.11.1.el9_5, kernel-core 5.14.0-503.11.1.el9_5, kernel-tools 5.14.0-503.11.1.el9_5, python3-perf 5.14.0-503.11.1.el9_5, +29 more
    fixed: vendor fix RHSA-2024:9315
  • Red Hat Enterprise Linux BaseOS EUS (v.9.4) bpftool 7.3.0-427.62.1.el9_4, kernel 5.14.0-427.62.1.el9_4, kernel-64k 5.14.0-427.62.1.el9_4, kernel-core 5.14.0-427.62.1.el9_4, kernel-tools 5.14.0-427.62.1.el9_4, python3-perf 5.14.0-427.62.1.el9_4, +28 more
    fixed: vendor fix RHSA-2025:3510
show 8 more
  • Red Hat Enterprise Linux CRB (v. 8) kernel-debuginfo-common-x86_64 4.18.0-553.27.1.el8_10, kernel-debuginfo-common-aarch64 4.18.0-553.27.1.el8_10, kernel-debuginfo-common-ppc64le 4.18.0-553.27.1.el8_10
    fixed: vendor fix RHSA-2024:8856
  • Red Hat Enterprise Linux NFV (v. 8) kernel-rt 4.18.0-553.27.1.rt7.368.el8_10, kernel-rt-kvm 4.18.0-553.27.1.rt7.368.el8_10, kernel-rt-core 4.18.0-553.27.1.rt7.368.el8_10, kernel-rt-modules 4.18.0-553.27.1.rt7.368.el8_10, kernel-rt-debug-kvm 4.18.0-553.27.1.rt7.368.el8_10, kernel-rt-debug-core 4.18.0-553.27.1.rt7.368.el8_10, +4 more
    fixed: vendor fix RHSA-2024:8870
  • Red Hat Enterprise Linux Real Time (v. 9) kernel-rt 5.14.0-503.11.1.el9_5, kernel-rt-core 5.14.0-503.11.1.el9_5, kernel-rt-modules 5.14.0-503.11.1.el9_5, kernel-rt-debug-core 5.14.0-503.11.1.el9_5, kernel-rt-modules-core 5.14.0-503.11.1.el9_5, kernel-rt-debug-modules 5.14.0-503.11.1.el9_5, +4 more
    fixed: vendor fix RHSA-2024:9315
  • Red Hat Enterprise Linux Real Time EUS (v.9.4) kernel-rt 5.14.0-427.62.1.el9_4, kernel-rt-core 5.14.0-427.62.1.el9_4, kernel-rt-modules 5.14.0-427.62.1.el9_4, kernel-rt-debug-core 5.14.0-427.62.1.el9_4, kernel-rt-modules-core 5.14.0-427.62.1.el9_4, kernel-rt-debug-modules 5.14.0-427.62.1.el9_4, +4 more
    fixed: vendor fix RHSA-2025:3510
  • Red Hat Enterprise Linux Real Time for NFV (v. 9) kernel-rt 5.14.0-503.11.1.el9_5, kernel-rt-kvm 5.14.0-503.11.1.el9_5, kernel-rt-core 5.14.0-503.11.1.el9_5, kernel-rt-modules 5.14.0-503.11.1.el9_5, kernel-rt-debug-kvm 5.14.0-503.11.1.el9_5, kernel-rt-debug-core 5.14.0-503.11.1.el9_5, +6 more
    fixed: vendor fix RHSA-2024:9315
  • Red Hat Enterprise Linux Real Time for NFV EUS (v.9.4) kernel-rt 5.14.0-427.62.1.el9_4, kernel-rt-kvm 5.14.0-427.62.1.el9_4, kernel-rt-core 5.14.0-427.62.1.el9_4, kernel-rt-modules 5.14.0-427.62.1.el9_4, kernel-rt-debug-kvm 5.14.0-427.62.1.el9_4, kernel-rt-debug-core 5.14.0-427.62.1.el9_4, +6 more
    fixed: vendor fix RHSA-2025:3510
  • Red Hat Enterprise Linux RT (v. 8) kernel-rt 4.18.0-553.27.1.rt7.368.el8_10, kernel-rt-core 4.18.0-553.27.1.rt7.368.el8_10, kernel-rt-modules 4.18.0-553.27.1.rt7.368.el8_10, kernel-rt-debug-core 4.18.0-553.27.1.rt7.368.el8_10, kernel-rt-debug-modules 4.18.0-553.27.1.rt7.368.el8_10, kernel-rt-modules-extra 4.18.0-553.27.1.rt7.368.el8_10, +2 more
    fixed: vendor fix RHSA-2024:8870
  • Red Hat CodeReady Linux Builder (v. 9) kernel-cross-headers 5.14.0-503.11.1.el9_5 Red Hat Enterprise Linux AppStream (v. 9) kernel-headers 5.14.0-503.11.1.el9_5
    not affected: vulnerable code not present

Red Hat CSAF VEX © Red Hat, Inc., from https://security.access.redhat.com/data/csaf/v2/vex/; changed: reduced to product statuses and remediations. CC BY 4.0 · csaf

CISA SSVC

Exploitation
none
Automatable
no
Technical impact
total
Assessed
21 mo ago

Exploit prediction

0.26% chance of exploitation in the next 30 days, higher than 18% of all scored CVEs (FIRST EPSS, 2026-11-08).

CVSS scores

assigned by version score vector
CNA 3.1 7.8 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CISA ADP 3.1 7.0 CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H
CNA 3.1 7.0 CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H

Affected products

  • Linux Linux
  • linux linux_kernel

Classification

Weakness
  • CWE-400 Uncontrolled Resource Consumption
Technology feeds

References

Sources

Fencer Vulns keeps one entry per vulnerability: the CVE id wins, then GHSA, and records that alias each other are merged, except that two CVEs always keep separate entries. The same data is available as JSON.