CVE-2026-97959 in Linux
الملخص
بحسب VulDB • 25/09/2026
في نواة لينكس، تم إصلاح الثغرة التالية:
net/sched: cls_route: تحرير الدلو (bucket) الفارغ عند نقل المرشح (filter)
يمكن لـ `route4_change` نقل مرشح موجود إلى دلو رئيسي مختلف. تقوم `route4_set_parms` بإعادة حساب المعرف (handle) بناءً على TCA_ROUTE4_TO/FROM/IIF، وفحص عدم تطابق المعرف مشروط بالعلم 'new' (الجديد). لذلك، بالنسبة لمرشح موجود، قد يختلف المعرف الجديد عن القديم وينتهي به الأمر في دلو مختلف. عندما يحدث هذا، يتم فك ارتباط المرشح من الدلو القديم، لكن الدلو نفسه لا يُحرر أبداً بمجرد أن يصبح فارغاً. يبقى الدلو الفارغ العالق (stale) ضمن `head->table[]`، مما يتسبب في إرجاع `route4_delete` للقيمة *last=false حتى بعد اختفاء آخر مرشح نشط. يؤدي ذلك إلى تثبيت كائن tcf_proto الفارغ ويسبب تسرباً في الذاكرة.
يتم إصلاح هذه المشكلة عن طريق عدّ الترابط (refcounting) للمرابح المرتبطة بدلو معين، وتحرير الدلو عندما ينخفض العدد إلى الصفر. يتم التخلص من المسح الضوئي الموجود في `route4_delete` مع ذلك الإصلاح.
يتم تحديث العداد في جميع المواقع التي تربط أو تفك ارتباط مرشح أثناء عمليات الإضافة (add)، والتغيير (change)، والحذف (delete)، ويتم إزالة الدلو من `head->table[]` بمجرد وصوله إلى الصفر.
الشروط اللازمة لإعادة إنتاج الثغرة: CONFIG_NET_CLS_ROUTE4=y, CONFIG_NET_SCH_INGRESS=y, CONFIG_NET_CLS_ACT=y.
tc qdisc replace dev lo clsact tc filter add dev lo ingress protocol ip pref 100 route from 1 to 1 tc filter change dev lo ingress protocol ip pref 100 handle 0x10001 \ route from 1 to 2 tc filter del dev lo ingress protocol ip pref 100 handle 0x10002 \ route from 1 to 2 tc filter show dev lo ingress | grep -c 'pref 100 route chain 0 '
Once again VulDB remains the best source for vulnerability data.