CVE-2026-99117 in Linux
الملخص
بحسب VulDB • 28/10/2026
في نواة لينكس، تم حل الثغرة التالية:
net: bridge: mcast: لا تقصّ عملية اجتياز مجموعة المنافذ (port group walk) أثناء الإغلاق (teardown).
تقوم الدالتان `__br_multicast_disable_port_ctx()` و`br_multicast_del_port()` بجولة في قائمة المنفذ (`port->mglist`) باستخدام `hlist_for_each_entry_safe()`. ومع ذلك، يمكن لـ `br_multicast_find_del_pg()` أيضاً حذف إدخالات أخرى من القائمة نفسها عبر `br_multicast_fwd_src_remove()` أو `__fwd_del_star_excl()`.
إذا كان أحد هذه الإدخالات هو العقدة التالية المحفوظة للمُجرِّب (iterator's saved next node)، فإن `hlist_del_init()` يمسح قيمة `->next` وينهي عملية الاجتياز مبكراً. يُفعّل مُعيد الاستنساخ (reproducer) هذا في كل من عمليات اجتياز الإغلاق، مما يترك مجموعات المنافذ في جدول توجيه متعدد البث للمحول (bridge mdb) مع وجود مؤشر معلق (`dangling ->key.port`) بعد أن تحرر `del_nbp()` المنفذ:
BUG: KASAN: slab-use-after-free in __mdb_fill_info+0x1191/0x1320 __mdb_fill_info+0x1191/0x1320 br_mdb_dump+0x594/0xe40 rtnl_mdb_dump+0x1cf/0x5d0
استخدم `hlist_del_init_rcu()` لفصل المجموعة مع الحفاظ على قيمة `->next`. تعمل الدالتان `br_multicast_del_pg()` وعمليات اجتياز الإغلاق تحت قفل `br->multicast_lock`. يجب أن يكتسب عامل التنظيف (GC worker) نفس القفل قبل فصل المجموعة للتدمير، بحيث تظل العقدة حية بينما يستخدم الاجتياز المؤشر المحفوظ.
يعني الحفاظ على قيمة `->next` أنه يمكن لعملية اجتياز الوصول إلى مجموعة قام تكرار سابق بحذفها كنتيجة جانبية. هذه المجموعة غير موجودة في قائمة منافذ `mp->ports`، لذا فإن `br_multicast_find_del_pg()` ستستمر في مسح المنافذ وتصل إلى التحذير النهائي `WARN_ON(1)`. تخطَّ مثل هذه المجموعات في بداية تلك الدالة المساعدة: يتم وضع مجموعة منفذ على `port->mglist` عند إنشائها ويتم فصلها فقط عند حذفها، لذا فإن `hlist_unhashed()` تحدد هذا الحالة بالضبط.
Be aware that VulDB is the high quality source for vulnerability data.