{"id":28710,"date":"2026-09-25T04:31:37","date_gmt":"2026-09-24T20:31:37","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-97478"},"modified":"2026-09-25T04:31:37","modified_gmt":"2026-09-24T20:31:37","slug":"cve-2026-97478","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-97478","title":{"rendered":"CVE-2026-97478 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nvirt: acrn: Fix irqfd"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>virt: acrn: Fix irqfd use-after-free during eventfd shutdown<\/p>\n<p>acrn_irqfd_deassign() and the eventfd EPOLLHUP wakeup can race and free<br \/>\nthe same struct hsm_irqfd:<\/p>\n<p>  CPU0                                 CPU1<br \/>\n  &#8212;-                                 &#8212;-<br \/>\n  eventfd_release()<br \/>\n    wake_up_poll(EPOLLHUP)<br \/>\n      hsm_irqfd_wakeup()<br \/>\n        queue_work(&amp;irqfd-&gt;shutdown)<br \/>\n                                       acrn_irqfd_deassign()<br \/>\n                                         hsm_irqfd_shutdown()<br \/>\n                                           list_del_init()<br \/>\n                                           eventfd_ctx_remove_wait_queue()<br \/>\n                                           eventfd_ctx_put()<br \/>\n                                         kfree(irqfd)<br \/>\n  hsm_irqfd_shutdown_work()<br \/>\n    container_of(work, &#8230;, shutdown)<br \/>\n    irqfd-&gt;vm                  irqfds<br \/>\n   under irqfds_lock and queue the cleanup work.<br \/>\n &#8211; hsm_irqfd_shutdown_work() becomes the sole owner that unhooks the<br \/>\n   eventfd waitqueue entry, drops the eventfd reference and frees the<br \/>\n   irqfd.<br \/>\n &#8211; A new HSM_IRQFD_FLAG_SHUTDOWN bit guarded by test_and_set_bit()<br \/>\n   ensures the cleanup work is queued at most once, no matter how many<br \/>\n   of {EPOLLHUP, deassign, deinit} fire concurrently.  This is safe to<br \/>\n   call from the waitqueue callback, which runs with wqh-&gt;lock held and<br \/>\n   IRQs disabled and therefore cannot take irqfds_lock.<br \/>\n &#8211; acrn_irqfd_deassign() flushes vm-&gt;irqfd_wq before returning so the<br \/>\n   eventfd is fully detached on return.  acrn_irqfd_deinit() deactivates<br \/>\n   every irqfd, flushes the workqueue and only then destroys it, so no<br \/>\n   path can queue_work() onto a torn-down workqueue.<br \/>\n &#8211; acrn_irqfd_assign() now installs the eventfd waitqueue entry and<br \/>\n   publishes the irqfd to vm-&gt;irqfds under irqfds_lock, so the irqfd is<br \/>\n   never visible to deassign\/deinit before its waitqueue entry is in<br \/>\n   place, and any EPOLLHUP that fires in the assign window queues<br \/>\n   cleanup work that blocks on irqfds_lock until publication is done.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>virt: acrn: Fix irqfd use-after-free during eventfd shutdown<\/p>\n<p>acrn_irqfd_deassign() and the eventfd EPOLLHUP wakeup can race and fr<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-28710","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/28710","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=28710"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=28710"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=28710"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}