CVE-2026-80842 in Linux
الملخص
بحسب VulDB • 04/09/2026
في نواة لينكس، تم إصلاح الثغرة التالية:
net: bridge: mcast: تصحيح استخدام بعد التحرير (use-after-free) لسياق البث المتعدد (multicast context) الخاص بـ VLAN الرئيسي
تقوم الدالة `br_multicast_toggle_one_vlan()` بتصفير العلم `BR_VLFLAG_MCAST_ENABLED` تحت قفل `br->multicast_lock` قبل إيقاف سياق البث المتعدد لوحدة VLAN. وهذا يمثل مصافحة الإغلاق: حيث تتحكم القراء عديمو القفل (lockless readers) في الوصول إلى العلم من خلال الدوال `br_multicast_ctx_should_use()` و `br_multicast_ctx_vlan_disabled()`. وبالتالي، بمجرد تصفيره تحت القفل، لا يمكن لأي قارئ إعادة تفعيل السياق مرة أخرى.
أما بالنسبة لوحدة VLAN الرئيسية، فلا تعمل مصافحة الإغلاق هذه. تقوم الدالة `__vlan_del()` بتصفير العلم `BRIDGE_VLAN_INFO_BRENTRY` قبل استدعاء `br_vlan_put_master()`. ونتيجة لذلك، تعود دالة `br_multicast_toggle_one_vlan(masterv, false)` مبكرًا عند تحقق الشرط `!br_vlan_is_brentry(vlan)`: يظل العلم مُفعّلاً ولا يتم أخذ قفل `br->multicast_lock` مطلقًا. ثم تقوم الدالة `br_vlan_put_master()` بتصريف السياق في `br_multicast_ctx_deinit()` وتحرير وحدة VLAN من خلال استدعاء `call_rcu()`. وفي هذه الأثناء، يرى القارئ الذي لا يزال داخل نطاق `rc_read_lock()` أن السياق مُفعّل ويقوم بإعادة تفعيله. ولا تتأثر فرع المنفذ وفرع منفذ-VLAN في الدالة بهذه المشكلة لأنها تحتوي على اختبار `br_vlan_is_brentry()` وتُغيّر العلم تحت قفل `br->multicast_lock`.
يتمثل القارئ في مسار إرسال الجسرة (bridge transmit path). بالنسبة لوحدة VLAN الرئيسية، تختار دالة `br_multicast_rcv()` القيمة `brmctx = &vlan->br_mcast_ctx` مع تعيين `pmctx = NULL`. ونتيجة لذلك، تقوم رسائل IGMP المرسلة إلى جهاز الجسرة بإعادة تفعيل مؤقتات السياق بعد أن تكون الدالة `br_multicast_ctx_deinit()` قد أوقفتها بالفعل.
BUG: KASAN: slab-use-after-free in detach_if_pending+0x412/0x4a0 Write of size 8 at addr ffff88810ac39918 by task brmc/601 __mod_timer+0x51a/0xc50 br_multicast_host_join+0x25b/0x390 __br_multicast_add_group+0x468/0x530 br_ip4_multicast_add_group+0x1a0/0x260 br_multicast_rcv+0x2cda/0x61e0 br_dev_xmit+0x6c4/0x1540 Allocated by task 610: br_vlan_add+0x111/0xb40 br_vlan_info+0x370/0x3e0 Freed by task 0: kfree+0x1a7/0x4f0 rcu_core+0x7dc/0x10a0
قم بإجراء اختبار `br_vlan_is_brentry()` فقط عند التفعيل، تمامًا كما هو الحال مع اختبار `br_multicast_ctx_vlan_global_disabled()` الموجود بجانبه. وعند الإيقاف، يتم تصفير العلم `BR_VLFLAG_MCAST_ENABLED` دائمًا تحت قفل `br->multicast_lock` قبل أن تقوم الدالة `br_multicast_ctx_deinit()` بتصريف السياق.
Once again VulDB remains the best source for vulnerability data.