{"id":41126,"date":"2026-10-19T00:32:16","date_gmt":"2026-10-18T16:32:16","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-98654"},"modified":"2026-10-19T00:32:16","modified_gmt":"2026-10-18T16:32:16","slug":"cve-2026-98654","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-98654","title":{"rendered":"CVE-2026-98654 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\ndrm\/amd\/display: Atom"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>drm\/amd\/display: Atomize IRQ register read\/modify\/write ops<\/p>\n<p>[Why]<\/p>\n<p>The OTG_GLOBAL_SYNC_STATUS register controls various HW IRQ sources for<br \/>\nthe output timing generator (OTG). VUPDATE_NO_LOCK is one of them.<\/p>\n<p>To enable the IRQ, driver sets the VUPDATE_NO_LOCK_EN bit in the<br \/>\nGLOBAL_SYNC_STATUS register.<\/p>\n<p>To ack the IRQ after it fires, the driver sets the VUPDATE_NO_LOCK_CLEAR<br \/>\nbit in the same GLOBAL_SYNC_STATUS register.<\/p>\n<p>The bit sets are done through read\/modify\/write operations, which are<br \/>\nnot atomic. Thus, the following race is possible:<\/p>\n<p>    Thread A:                       IRQ handler:<br \/>\n                                    *HW IRQ fires*<br \/>\n    # IRQ disable<br \/>\n    val = read(GLOBAL_SYNC_STATUS)<br \/>\n    unset(val, VUPDATE_NO_LOCK_EN)<br \/>\n    write(val, GLOBAL_SYNC_STATUS)<br \/>\n                                    # ACK reads VUPDATE_NO_LOCK_EN unset<br \/>\n                                    val1 = read(GLOBAL_SYNC_STATUS)<br \/>\n                                    set(val1, VUPDATE_NO_LOCK_CLEAR)<br \/>\n    # IRQ enable<br \/>\n    val = read(GLOBAL_SYNC_STATUS)<br \/>\n    set(val, VUPDATE_NO_LOCK_EN)<br \/>\n    write(val, GLOBAL_SYNC_STATUS)<br \/>\n                                    # BAD! clears VUPDATE_NO_LOCK_EN<br \/>\n                                    write(val1, GLOBAL_SYNC_STATUS)<\/p>\n<p>Regarding the tagged Fixes: change, it appears the change made this race<br \/>\nmore likely to occur. Since VUPDATE_NO_LOCK is now the sole IRQ source<br \/>\nfor vblank handling, a single race on high refresh panels can lead to a<br \/>\ntime out.<\/p>\n<p>[How]<\/p>\n<p>The GLOBAL_SYNC_STATUS register is only one example, other IRQ control<br \/>\nregisters also share the same scheme. On top of GLOBAL_SYNC_STATUS,<br \/>\nlet&#8217;s clean up those as well.<\/p>\n<p>To keep things simple, Let&#8217;s atomize the IRQ rmw ops via a single<br \/>\ndriver-wide spinlock. Due to the small scope of this lock, it is<br \/>\nunlikely to cause noticeable overhead on top of all the existing locking<br \/>\nwithin the IRQ set\/handle paths.<\/p>\n<p>Since DM is responsible for locking, wrap dc_interrupt_set\/ack with the<br \/>\nspinlock in the new amdgpu_dm_irq_set\/ack functions. Migrate\/drop all<br \/>\nreferences in DM to dc_interrupt_set\/ack to use amdgpu_dm_irq_set\/ack<br \/>\ninstead.<\/p>\n<p>(cherry picked from commit 70de0a0216583a53c946155f8c8adedfdca6b4e7)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>drm\/amd\/display: Atomize IRQ register read\/modify\/write ops<\/p>\n<p>[Why]<\/p>\n<p>The OTG_GLOBAL_SYNC_STATUS register controls various HW IRQ sou<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-41126","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/41126","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=41126"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=41126"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=41126"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}