Cloudanix VulnDB

CVE-2026-68329

High · 8.8

CVSS

8.8

EPSS

0.1%

Published

Aug 10, 2026

CISA due date

—

Cloudanix analysis

Schedule a fix SSVC: Track

A timing flaw in how the operating system coordinates hardware memory protection on some AMD systems can let a local attacker corrupt critical memory and gain full control of the machine.

Exploitation
Local Privilege
Attacker needs
Low Privilege
Complexity
Moderate
Impact
Full Compromise
Component
OS kernel
Class
Race Condition
Remediation
Upgrade
Effort
Medium
Patch risk
Low

What it actually does

Race condition in AMD IOMMU command synchronization allows a CPU to skip waiting for hardware completion of prior invalidation commands, permitting page-table pages to be freed while the IOMMU may still hold stale translations and perform walks against them, resulting in a use-after-free window.

Why it matters to the business

Local attackers can achieve kernel memory corruption on affected Linux systems, enabling privilege escalation, container escape, or denial of service; the issue affects any AMD IOMMU-equipped server or workstation running vulnerable kernels.

How an attack unfolds

An attacker with local code execution on a multi-CPU system concurrently queues IOMMU invalidation commands and completion-wait operations from separate CPUs; by racing the lockless need_sync check against another CPU's CWAIT, the attacker returns early without waiting, then frees page tables while the IOMMU still references them.

How to fix it

Upgrade the Linux kernel to a version containing the fix that acquires iommu->lock before testing need_sync and waits on the last allocated sequence number instead of returning early; rebuild and reboot all affected hosts.

How to confirm the fix worked

Confirm the patched kernel is running, then exercise multi-CPU IOMMU invalidation workloads while monitoring for absence of early returns or use-after-free reports in dmesg and kernel logs.

Typical attack path

  1. Obtain local unprivileged code execution on a multi-CPU AMD IOMMU system
  2. Trigger concurrent IOMMU invalidation and completion-wait operations across CPUs
  3. Exploit the early return in iommu_completion_wait to bypass synchronization
  4. Free IOMMU page-table memory while hardware may still walk stale entries
  5. Leverage resulting use-after-free for kernel memory corruption or control-flow hijack

How to detect it

Review kernel logs and dmesg for IOMMU-related warnings, use-after-free reports, or page-table corruption around the time of suspected activity; correlate with processes performing frequent IOMMU-mapped DMA operations.

What your security team should do

  • Prioritize kernel upgrades on all AMD IOMMU systems within the next maintenance window
  • Restrict local unprivileged access where possible until patches are applied
  • Monitor vendor advisories for the exact fixed kernel versions once released

The record

In the Linux kernel, the following vulnerability has been resolved: iommu/amd: Wait for completion instead of returning early in iommu_completion_wait() need_sync is a per-IOMMU flag shared by all domains and devices behind that IOMMU. It is set whenever a command is queued with sync == true and cleared when a completion-wait (CWAIT) command is queued. However, a cleared need_sync only means that a covering CWAIT has been queued, not that all previously queued commands have actually completed in hardware. iommu_completion_wait() read need_sync locklessly and returned early when it was false. This breaks the "block until all previously queued commands have completed" contract in a multi-CPU scenario: CPU2: queue inv-B => need_sync = true CPU1: queue CWAIT(N); need_sync = false; then wait_on_sem(N) CPU2: read need_sync == false => return 0 (no wait!) CPU2 returns without waiting for any sequence number even though its inv-B may not have completed yet (CWAIT(N), queued after inv-B, has not been signaled). CPU2 then proceeds to, for example, free page-table pages while the IOMMU can still walk stale translations, opening a use-after-free window. This is a logical race in the meaning of the flag, not a memory-visibility issue, so barriers alone do not help. Fix it without losing the optimization of avoiding redundant CWAIT commands: take iommu->lock before testing need_sync, and when it is false do not return early but wait for the last allocated sequence number (cmd_sem_val). Since need_sync == false implies no sync command was queued after the last CWAIT, that CWAIT is FIFO-ordered after every not-yet-completed command, so waiting for its sequence number guarantees all prior commands (possibly queued by another CPU) have completed. The common path with pending work is unchanged and no extra hardware command is issued.

Affected packages

Ecosystem Package Introduced Fixed

Related vulnerabilities