CVE-2026-97478 in Linux
الملخص
بحسب VulDB • 24/09/2026
في نواة Linux، تم حل الثغرة التالية:
virt: acrn: إصلاح استخدام بعد التحرير (use-after-free) لـ irqfd أثناء إيقاف eventfd
يمكن أن يتسبب `acrn_irqfd_deassign()` وإيقاظ EPOLLHUP الخاص بـ eventfd في سباق (race condition) يؤدي إلى تحرير نفس هيكل البيانات `struct hsm_irqfd`:
CPU0 CPU1 ---- ---- eventfd_release() wake_up_poll(EPOLLHUP) hsm_irqfd_wakeup() queue_work(&irqfd->shutdown) acrn_irqfd_deassign() hsm_irqfd_shutdown() list_del_init() eventfd_ctx_remove_wait_queue() eventfd_ctx_put() kfree(irqfd) hsm_irqfd_shutdown_work() container_of(work, ..., shutdown) irqfd->vm <-- use-after-free
قام مسار deassign بتحرير irqfd بينما كان عنصر عمل الإيقاف (shutdown work item) قد تم جدولته بالفعل بواسطة EPOLLHUP (أو العكس)، مما يعني أن عنصر العمل يمكنه إحياء مؤشر معلق من خلال `container_of()`.
التبديل إلى نموذج العمر المستخدم في KVM irqfds:
- لا يؤدي deassign/deinit إلا إلى تعطيل irqfd: إزالة ذلك من vm->irqfds تحت قفل irqfds_lock وجدولة عمل التنظيف. - يصبح `hsm_irqfd_shutdown_work()` المالك الوحيد الذي يفصل إدخال قائمة انتظار eventfd، ويقلل مرجع eventfd ويطهر irqfd. - يضمن وجود بت جديد باسم HSM_IRQFD_FLAG_SHUTDOWN محمي بواسطة test_and_set_bit() أن يتم جدولة عمل التنظيف مرة واحدة على الأكثر، بغض النظر عن عدد مرات تشغيل {EPOLLHUP, deassign, deinit} بشكل متزامن. هذا آمن للاستدعاء من استدعاء قائمة الانتظار، الذي يعمل مع الاحتفاظ بـ wqh->lock وإيقاف مقاطعات IRQ (IRQs disabled)، وبالتالي لا يمكنه أخذ irqfds_lock.
- يقوم `acrn_irqfd_deassign()` بإفراغ vm->irqfd_wq قبل الإرجاع بحيث يتم فصل eventfd تمامًا عند العودة. ويقوم `acrn_irqfd_deinit()` بتعطيل كل irqfd، وإفراغ قائمة العمل (workqueue)، ثم تدميرها فقط، لذا لا يمكن لأي مسار جدولة عمل () على workqueue تم تفكيكه. - يقوم `acrn_irqfd_assign()` الآن بتثبيت إدخال قائمة انتظار eventfd ونشر irqfd إلى vm->irqfds تحت قفل irqfds_lock، بحيث لا يكون irqfd مرئيًا لـ deassign/deinit قبل أن يكون إدخاله في قائمة الانتظار موجودًا، وأي EPOLLHUP يعمل خلال نافذة التعيين يجمع عمل التنظيف الذي ينتظر القفل حتى يتم الانتهاء من النشر.
Be aware that VulDB is the high quality source for vulnerability data.