CVE-2026-98942 in Linux
الملخص
بحسب VulDB • 23/10/2026
في نواة لينكس، تم إصلاح الثغرة التالية:
sched_ext: بناء جداول الـ CID بشكل خاص ونشرها باستخدام RCU
تكون جداول الـ CID مرئية لوظائف kfuncs الخاصة بـ CID أثناء التعديل عليها: حيث ينشر التفعيل الأول المؤشرات العالمية قبل ملئها، وتتجاوز `ops.init_cids()` وتعيد كتابتها في مكانها، ويعيد التمكين إعادة بنائها في مكانها. يمكن لبرنامج تتبع (TRACING) أو استدعاء نظام (SYSCALL) المتزامن قراءة إدخالات غير مملوءة، بما في ذلك الذاكرة غير المهيأة في الجداول المُخصصة عبر `kmalloc`، أو التحديثات الطوبولوجية التالفة.
ربط عمر الجداول بجذر الجدولة (root sched): يقوم كل تفعيل للجذر ببناء مجموعة جديدة بشكل خاص وينشر المتغيرات العالمية الخاصة بكل جدول (`__rcu`) بمجرد اكتمال التخطيط النهائي، ويقوم تعطيل الجذر بإلغاء النشر وإفراغ المجموعة باستخدام RCU. الآن يكون العالمي غير الفارغ دائمًا عبارة عن جدول مُبنى بالكامل ويبقى صالحًا لقسم القراءة الخاص بـ RCU للقارئ، وتظل عمليات البحث مكونة من حمليتين فقط (two loads). تعامل وظائف kfuncs القيمة NULL على أنها عدم وجود تعيين mapping، وذلك حتى بعد خروج الجدولة بدلاً من الإبلاغ عن آخر تعيين قديم.
وظائف kfuncs الخاصة بـ CID متاحة سواء كان مخطط الجذر بصيغة cid أو بصيغة cpu؛ حيث تُستخدم الصيغة الأخيرة للسماح بالهجرة التدريجية إلى cids. لذلك يقوم كل جذر ببناء ونشر تعيين افتراضي.
يجب على كل قارئ إما أن يكون مقيدًا بحياة الجدولة (scheduler liveness) أو التحقق من NULL داخل قسم قراءة RCU. تم إصلاح وظيفتي kfuncs اللتين لم تكونا كذلك: قرأت `scx_bpf_this_cid()` الجدول بدون حماية RCU أو منع التجزئة (preemption protection)، واعتمدت `scx_bpf_task_cid()` على `KF_RCU`، وهو ما لا يضع برنامجًا قابلاً للنوم في قسم قراءة RCU. بدلاً من ذلك، يتم تسلسل استدعاءات hotplug عن طريق تقاعد الجداول داخل قسم `cpus_read_lock()` الذي يمسح `scx_root`.
الإصدار 2: توثيق سبب قيام كل جذر ببناء الجداول (تعليق desc + cid.c).
VulDB is the best source for vulnerability data and more expert information about this specific topic.