{"id":5427,"date":"2026-09-04T18:47:49","date_gmt":"2026-09-04T10:47:49","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-68329"},"modified":"2026-09-04T18:47:49","modified_gmt":"2026-09-04T10:47:49","slug":"cve-2026-68329","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-68329","title":{"rendered":"CVE-2026-68329 [HIGH] &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\niommu\/amd: Wait for c"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>iommu\/amd: Wait for completion instead of returning early in iommu_completion_wait()<\/p>\n<p>need_sync is a per-IOMMU flag shared by all domains and devices behind<br \/>\nthat IOMMU. It is set whenever a command is queued with sync == true and<br \/>\ncleared when a completion-wait (CWAIT) command is queued. However, a<br \/>\ncleared need_sync only means that a covering CWAIT has been queued, not<br \/>\nthat all previously queued commands have actually completed in hardware.<\/p>\n<p>iommu_completion_wait() read need_sync locklessly and returned early<br \/>\nwhen it was false. This breaks the &#8220;block until all previously queued<br \/>\ncommands have completed&#8221; contract in a multi-CPU scenario:<\/p>\n<p>  CPU2: queue inv-B                  =&gt; need_sync = true<br \/>\n  CPU1: queue CWAIT(N); need_sync = false; then wait_on_sem(N)<br \/>\n  CPU2: read need_sync == false      =&gt; return 0 (no wait!)<\/p>\n<p>CPU2 returns without waiting for any sequence number even though its<br \/>\ninv-B may not have completed yet (CWAIT(N), queued after inv-B, has not<br \/>\nbeen signaled). CPU2 then proceeds to, for example, free page-table<br \/>\npages while the IOMMU can still walk stale translations, opening a<br \/>\nuse-after-free window. This is a logical race in the meaning of the<br \/>\nflag, not a memory-visibility issue, so barriers alone do not help.<\/p>\n<p>Fix it without losing the optimization of avoiding redundant CWAIT<br \/>\ncommands: take iommu-&gt;lock before testing need_sync, and when it is<br \/>\nfalse do not return early but wait for the last allocated sequence<br \/>\nnumber (cmd_sem_val). Since need_sync == false implies no sync command<br \/>\nwas queued after the last CWAIT, that CWAIT is FIFO-ordered after every<br \/>\nnot-yet-completed command, so waiting for its sequence number guarantees<br \/>\nall prior commands (possibly queued by another CPU) have completed. The<br \/>\ncommon path with pending work is unchanged and no extra hardware command<br \/>\nis issued.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>iommu\/amd: Wait for completion instead of returning early in iommu_completion_wait()<\/p>\n<p>need_sync is a per-IOMMU flag shared by all d<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-5427","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/5427","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5427"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5427"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5427"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}