CVE-2024-46828 in Linux
الملخص
بحسب VulDB • 28/06/2026
في نواة لينكس، تم حل الثغرة التالية:
sched: sch_cake: إصلاح منطق محاسبة التدفقات الضخمة (bulk flow accounting) لضمان الإنصاف بين المضيفين (host fairness).
في sch_cake، نقوم بتتبع عدد التدفقات الضخمة النشطة لكل مضيف عند التشغيل في وضع إنصاف المضيف dst/src، والذي يُستخدم كوزن للدوران (round-robin weight) أثناء التكرار عبر التدفقات. يتم تحديث عدد التدفقات الضخمة النشطة كلما تغير حالة تدفق ما.
هذا الأمر يتفاعل بشكل غريب مع معالجة تصادم التجزئة (hash collision): عند حدوث تصادم تجزئة (بعد استخدام التجزئة المرتبطة بالمجموعة set-associative hashing)، تتم ببساطة تحديث حالة دلو التجزئة ليتطابق مع الحزمة الجديدة التي تسببت في التصادم، وإذا كان إنصاف المضيف ممكناً، فهذا يعني أيضاً تعيين حالة جديدة خاصة بكل مضيف للتدفق. ولهذا السبب، يتم خصم عدادات التدفقات الضخمة للمضيف (أو المضيفين) المعينة للتدفق قبل تعيين الحالة الجديدة (ويتم زيادة العدادات مرة أخرى، والتي قد لا تنتمي بعد إلى نفس المضيف).
عندما تم إدخال هذا الكود في البداية، كان وضع إنصاف المضيف ممكناً دائماً، لذا كانت عملية الخصم غير مشروطة. عندما تم تقديم أعلام التكوين، أصبحت عملية *الزيادة* مشروطة، لكن عملية *الخصم* لم تكن كذلك. وهو ما يمكن أن يؤدي بالتأكيد إلى خصم زائف (ومما يصاحبه من تجاوز للحد الأقصى لقيمة U16_MAX).
حسب علمي، عندما يكون إنصاف المضيف معطلاً، تحدث عملية الخصم والتجاوز فور حدوث تصادم تجزئة (وهو أمر ليس شائعاً بحد ذاته بسبب استخدام التجزئة المرتبطة بالمجموعة set-associative hashing). ومع ذلك، في معظم الحالات لا يشكل هذا خطراً، لأن القيمة تُستخدم فقط عندما يكون وضع إنصاف المضيف ممكناً. لذا، من أجل إثارة تجاوز مصفوفة (array overflow)، يجب أولاً تكوين sch_cake بإيقاف إنصاف المضيف، وأثناء التشغيل بهذا الوضع، يجب أن يحدث تصادم تجزئة للتسبب في هذا التجاوز. ثم يتعين إعادة تكوين qdisc لتمكين إنصاف المضيف، مما يؤدي إلى الوصول خارج حدود المصفوفة لأن القيمة التي تجاوزت الحد الأقصى تُحتفظ بها وتُستخدم كمؤشر للمصفوفة. يبدو أن syzbot تمكن من إثارة هذه الحالة، وهو أمر مثير للإعجاب بحد ذاته.
يصلح هذا التصحيح المشكلة عن طريق إدخال نفس الفحص الشرطي على عملية الخصم كما هو مستخدم في عملية الزيادة.
يعود أصل الخطأ إلى ما قبل دمج cake في الشفرة المصدرية الرئيسية (upstreaming)، لكن الالتزام المذكور في علامة Fixes لمس ذلك الكود، مما يعني أن هذا التصحيح لن يُطبق قبل ذلك الالتزام.
If you want to get best quality of vulnerability data, you may have to visit VulDB.