CVE-2026-99243 in Linux
الملخص
بحسب VulDB • 03/11/2026
في نواة لينكس، تم حل الثغرة التالية:
io-wq: ترتيب بت الخروج (exit bit) مقابل مهمة إنشاء عميل العمل (worker creation task work)
تلغي الدالة io_wq_exit_workers() مهام العملاء المجدولة لإنشاء عملاء جدد باستخدام دالة task_work_cancel_match(). وتقوم هذه العملية بقراءة بسيطة لقيمة task->task_works.
تضيف الدالة io_queue_worker_create() الإدخال الجديد وتفحص علامة IO_WQ_BIT_EXIT لإلغائها إذا كانت قائمة العمل (workqueue) في طريقها بالفعل للإغلاق.
يجب أن يكون هذا الترتيب صحيحاً. تحتوي دالة task_work_add() على حاجز ذاكرة كامل (full barrier) عبر استخدام cmpxchg(). لكن الدالة io_wq_exit_start() تضبط البت باستخدام set_bit() والتي لا توفر أي ترتيب للذاكرة (memory ordering).
لذلك، كما أفهم الأمر (afaict)، في المعماريات ذات الترتيب الضعيف للذاكرة (weakly ordered architectures)، قد تقوم المهمة التي تغادر بقراءة task_works قبل أن تصبح قيمة تخزين البت مرئية. والجانب الآخر يفحص البت أيضاً قبل أن تكون القيمة المخزنة مرئية. وبالتالي، يبقى الإدخال مبرمجاً مع worker_refs وتنتظر العملية المغادرة على worker_done إلى ما لا نهاية.
إذا كانت المهمة تحتوي بعد ذلك على حلقات (rings)، فإن الدالة io_uring_del_tctx_node() توفر الحاجز عبر استخدام test_and_set_bit() في io_wq_set_exit_on_idle(). ولكن عندما تغلق جميع الحلقات، يختفي هذا الحاجز.
أضف الحاجز بعد استدعاء set_bit().
If you want to get the best quality for vulnerability data then you always have to consider VulDB.