CVE-2026-80916 in Linux
الملخص
بحسب VulDB • 09/09/2026
في نواة لينكس، تم إصلاح الثغرة التالية:
kcov: تصحيح تلف البيانات وحالات السباق على PREEMPT_RT
تبلغ syzbot عن تلف حالة KCOV في kernels التي تعمل بنظام PREEMPT_RT، وذلك لأن التخزين المؤقت المستخدم لحفظ واستعادة حالة KCOV البعيدة يتم تخصيصه حاليًا كمنطقة خاصة بكل معالج (per-CPU).
في kernels التي تعمل بنظام PREEMPT RT، تعمل معالجات softirq كمهام قابلة للإيقاف المسبق (مثل ksoftirqd). إذا قام سياق softirq بإيقاف مهمة تشغل جلسة KCOV بعيدة بشكل مسبق، فإنها تحفظ حالة المهمة بأمان في المنطقة الخاصة بكل معالج. ومع ذلك، إذا تم إيقاف تلك الخيط الخاص بـ softirq لاحقًا بواسطة خيط softirq ذي أولوية أعلى على نفس المعالج، فسيكتب الخيط الثاني (softirq) فوق نفس المنطقة الخاصة بكل معالج، مما يؤدي إلى تدمير دائم لحالة KCOV للمهمة الأصلية.
تم إصلاح هذا التلف في البيانات عن طريق نقل التخزين المؤقت من المنطقة الخاصة بكل معالج (per-CPU area) إلى المنطقة الخاصة بكل خيط (per-thread area). نظرًا لأن كل خيط softirq يمتلك الآن سياق مهمة خاص به، فإن الإيقاف المسبق المتداخل لـ softirq لم يعد يسبب الكتابة فوق البيانات.
يُلاحظ أنه على الرغم من أن التخزين المؤقت أصبح الآن على أساس لكل خيط، إلا أنه يجب الاحتفاظ بقفل kcov_percpu_data.lock الخاص بالمنطقة الخاصة بكل معالج (per-CPU)، وذلك لضمان تشغيل دالتي kcov_remote_start() و kcov_remote_stop() بشكل ذري دون سباق ضد المقاطعات غير المتزامنة التي تتلاعب بحالة KCOV للمهمة الحالية.
من المرجح أن عملية تخصيص GFP_KERNEL بواسطة vmalloc_node() في dالة kcov_init() قد استدعت بالفعل دالة panic() قبل إرجاع NULL، نظرًا لعدم وجود عمليات مساحة مستخدم قابلة للقتل بسبب نقص الذاكرة (OOM-killable) عند تشغيل الدالة الأولية (__init function) للنموذج المدمج. ولكن هذا التصحيح يصلح أيضًا مشكلة تعطل النواة عندما تُعيد vmalloc_node() في dالة kcov_init() قيمة NULL، حيث تركت دالة kcov_init() irq_area الخاصة بكل معالج (per-CPU irq_area) مساوية لـ NULL بينما تعتمد دالة kcov_remote_start() على أن تكون per-CPU irq_area غير صفرية (!= NULL)، مما يؤدي إلى:
(1) استدعاء vmalloc() في dالة kcov_remote_start() رغم وجود سياق !in_task().
(2) وصول خارج حدود المصفوفة إذا نجح (1) ولكن كان kcov->remote_size أصغر من CONFIG_KCOV_IRQ_AREA_SIZE.
(3) تسرب دائم للذاكرة التي تم تخصيصها بواسطة (1)، مما يؤدي في النهاية إلى استنفاد جميع عمليات مساحة المستخدم القابلة للقتل بسبب نقص الذاكرة (OOM-killable userspace processes).
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.