CVE-2026-52969
Linux Kernel vulnerability analysis and mitigation

Overview

CVE-2026-52969 is an integer overflow vulnerability in the Linux kernel's KVM subsystem, specifically in the kvm_reset_dirty_gfn() function, that allows a local attacker with VMM access to bypass bounds checking and trigger out-of-bounds memory access. The vulnerability was published on June 24, 2026, and affects Linux kernel versions from 5.11 up to (but not including) the fixed releases: 5.15.209, 6.1.175, 6.6.141, 6.12.91, 6.18.33, 7.0.10, and 7.1. Red Hat Enterprise Linux 6 through 10 are listed as unaffected. It carries a CVSS v3.1 base score of 7.0 (High) (Red Hat CVE, Red Hat Bugzilla).

Technical details

The root cause is an unchecked u64 integer overflow (CWE-190) in kvm_reset_dirty_gfn(), which validates the dirty ring entry with (offset + __fls(mask)) >= memslot->npages — but since offset is a u64, the addition can silently wrap around to zero, bypassing the check entirely. The dirty ring backing is MAP_SHARED memory at KVM_DIRTY_LOG_PAGE_OFFSET of the vcpu file descriptor, meaning a VMM process (e.g., QEMU) can rewrite the slot and offset fields of dirty ring entries between when the kernel pushes them and when KVM_RESET_DIRTY_RINGS consumes them. An attacker crafts two entries with entry[i].offset = 0xffffffffffffffc1 and entry[i+1].offset = 0; the coalescing loop computes a delta of 63, folds the entries, and the resulting offset 0xffffffffffffffc1 with __fls(mask) = 63 sums to 0 in u64, passing the bounds check. The invalid offset then propagates into kvm_arch_mmu_enable_log_dirty_pt_masked(), and on the legacy MMU path (shadow paging), reaches gfn_to_rmap(), which performs an out-of-bounds load using a near-U64_MAX GFN index into slot->arch.rmap[0][] (Red Hat Bugzilla).

Impact

Successful exploitation allows a local attacker with access to /dev/kvm (i.e., a VMM process such as QEMU) to perform an out-of-bounds memory read and a conditional write (PT_WRITABLE_MASK clear) on arbitrary kernel memory, potentially leading to memory corruption or local privilege escalation to kernel-level code execution. The impact is limited to the local system and requires the legacy MMU path (shadow paging) to be active — specifically, kvm_memslots_have_rmaps() must return true, meaning shadow roots have been allocated or a write-tracked slot is in use. Confidentiality, integrity, and availability are all rated as HIGH in the CVSS scoring (Red Hat CVE, Red Hat Bugzilla).

Exploitation steps

  1. Gain VMM access: Obtain access to a process that holds /dev/kvm (e.g., a QEMU instance or equivalent VMM) on a system running a vulnerable kernel (5.11 ≤ version < patched release) with shadow paging enabled (kvm_memslots_have_rmaps() == true).
  2. Enable dirty ring tracking: Configure the KVM VM to use the dirty ring mechanism (KVM_CAP_DIRTY_LOG_RING) so that dirty GFN entries are written to the shared MAP_SHARED ring buffer at KVM_DIRTY_LOG_PAGE_OFFSET of the vcpu fd.
  3. Trigger dirty ring population: Run the guest VM to generate dirty memory entries, causing the kernel to populate the dirty ring with slot/offset pairs.
  4. Craft malicious entries: Before KVM_RESET_DIRTY_RINGS is issued, rewrite two consecutive dirty ring entries in the shared memory: set entry[i].offset = 0xffffffffffffffc1 and entry[i+1].offset = 0, exploiting the fact that the slot/offset payload is taken on trust (only the flags handshake is validated).
  5. Trigger KVM_RESET_DIRTY_RINGS: Issue the KVM_RESET_DIRTY_RINGS ioctl, causing kvm_dirty_ring_reset() to re-read the crafted entries via READ_ONCE(), compute delta = 63, coalesce the entries, and call kvm_reset_dirty_gfn() with offset = 0xffffffffffffffc1 and __fls(mask) = 63.
  6. Bypass bounds check: The u64 addition 0xffffffffffffffc1 + 63 wraps to 0, which is less than memslot->npages, so the bounds check passes silently.
  7. Trigger out-of-bounds access: The invalid offset propagates into kvm_arch_mmu_enable_log_dirty_pt_masked()gfn_to_rmap(), which indexes slot->arch.rmap[0][] with a near-U64_MAX GFN, performing an out-of-bounds load and a conditional kernel memory write, potentially enabling memory corruption or privilege escalation (Red Hat Bugzilla).

Indicators of compromise

  • Logs: Kernel oops, BUG, or KASAN/KFENCE reports in dmesg or /var/log/kern.log referencing kvm_reset_dirty_gfn, gfn_to_rmap, or kvm_arch_mmu_enable_log_dirty_pt_masked with out-of-bounds access addresses near U64_MAX.
  • Process Behavior: Unexpected crashes or hangs of QEMU/KVM VMM processes; guest VMs terminating abnormally after KVM_RESET_DIRTY_RINGS ioctl calls.
  • Kernel: Memory corruption symptoms such as random kernel panics, use-after-free reports, or unexpected changes to page table write-protection bits on the host system following KVM dirty ring reset operations.

Mitigation and workarounds

Apply the upstream Linux kernel patches that add a standalone range check on offset before the addition in kvm_reset_dirty_gfn(), ensuring offset < memslot->npages is validated independently before any arithmetic. Fixed versions are: 5.15.209, 6.1.175, 6.6.141, 6.12.91, 6.18.33, 7.0.10, and 7.1 (mainline). As a workaround where patching is not immediately possible, restrict access to /dev/kvm to only fully trusted VMM processes, and consider disabling shadow paging (use TDP/EPT/NPT instead) to prevent the vulnerable legacy MMU code path from being reached. Red Hat Enterprise Linux 6–10 are listed as unaffected (Red Hat CVE, Red Hat Bugzilla).

Community reactions

Red Hat has assessed all supported RHEL versions (6–10) as unaffected and tracked the issue via Bugzilla with high severity. The upstream kernel security advisory was published via the linux-cve-announce mailing list. No significant broader media coverage or notable researcher commentary has been observed beyond standard vulnerability tracking (Red Hat Bugzilla).

Additional resources


SourceThis report was generated using AI

Related Linux Kernel vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-64181HIGH7.8
  • Linux Kernel logoLinux Kernel
  • linux-azure-4.15
NoYesJul 19, 2026
CVE-2026-64186NONEN/A
  • Linux Kernel logoLinux Kernel
  • libperf
NoYesJul 19, 2026
CVE-2026-64183NONEN/A
  • Linux Kernel logoLinux Kernel
  • linux-aws-6.14
NoYesJul 19, 2026
CVE-2026-64182NONEN/A
  • Linux Kernel logoLinux Kernel
  • linux-oracle-6.17
NoYesJul 19, 2026
CVE-2026-64180NONEN/A
  • Linux Kernel logoLinux Kernel
  • linux-azure-5.4
NoYesJul 19, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management