CVE-2026-64248 in Linux
الملخص
بحسب VulDB • 25/07/2026
في نواة لينكس، تم حل الثغرة التالية:
MIPS: smp: إبلاغ RCU عن المعالج الذي يتوقف (dying CPU) في دالة stop_this_cpu()
تقوم الدالة `smp_send_stop()` بإيقاف جميع معالجات النظام الثانوية داخل `stop_this_cpu()`. وتُعلّم هذه الدالة أن حالة المعالج غير متصلة (offline) بالنسبة للمجدول عبر استدعاء `set_cpu_online(false)`، لكنها لا تُبلغ RCU بذلك. ونتيجة لذلك، يستمر RCU في انتظار حالة خاملة (quiescent state) من معالجات أصبحت تدور بشكل دائم بينما تم تعطيل مقاطعاتها (interrupts).
طالما لم ينتظر أي شيء انتهاء فترة سماح RCU (RCU grace period) بعد استدعاء `smp_send_stop()`، فإن هذا الأمر غير ضار، وهو السبب في بقاء هذه المشكلة دون أن تُلاحظ. ومع ذلك، منذ الالتزام البرمجي commit 91840be8f710 ("irq_work: Fix use-after-free in irq_work_single() on PREEMPT_RT")، تقوم الدالة `irq_work_sync()` باستدعاء `synchronize_rcu()` على البنى المعمارية التي لا تملك آلية IPI ذاتية للمقاطعات (self-IPI)، أي حيث تُرجع `arch_irq_work_has_interrupt()` القيمة false. وهذا هو الإعداد الافتراضي لـ asm-generic المستخدم بواسطة MIPS. وبالتالي، فإن أي استدعاء لـ `irq_work_sync()` يتم في مسار إعادة التشغيل/الإيقاف بعد `smp_send_stop()` سيعلق على فترة سماح لا يمكن أن تكتمل أبداً، مما يؤدي إلى تعليق عملية إعادة التشغيل:
WARNING: CPU: 0 PID: 15 at kernel/irq_work.c:144 irq_work_queue_on ... rcu: INFO: rcu_sched detected stalls on CPUs/tasks: rcu: Offline CPU 1 blocking current GP. rcu: Offline CPU 2 blocking current GP. rcu: Offline CPU 3 blocking current GP.
لوحظت هذه المشكلة على عدة شرائح SoC للمبدلات من نوع Realtek MIPS (MIPS interAptiv)، وظهرت أثناء تحديث النواة في مشروع OpenWrt من الإصدار 6.18.33 إلى 6.18.34، بعد استرجاع التصحيح (backport) إلى فرع الاستقرار 6.18. كما تم استرجاع هذا التصحيح ليشمل حتى الإصدار 6.1.
يتم استدعاء `rcutree_report_cpu_dead()` مرة واحدة بمجرد تعطيل المقاطعات، محاكاةً لمسار إيقاف المعالج الساخن العام (generic CPU-hotplug offline path)، بحيث يتوقف RCU عن الانتظار على معالجات النظام المتوقفة ويمكن لفترات سماح RCU أن تكتمل. تقوم MIPS بإيقاف جميع معالجاتها هنا دون المرور عبر آلية إدارة حالة المعالج الساخن، لذا لا يتم إصدار هذا التقرير بشكل آخر. إن إبلاغ RCU عن معالج يتوقف خارج مسار إيقاف التشغيل العادي لإدارة الحالة الساخنة ليس أمراً غير مسبوق: حيث تفعل arm64 الشيء نفسه في دالة `cpu_die_early()`. هناك، يُعد ذلك استثناءً لمعالج كان يحاول الاتصال (coming online) ويُلغي عملية التهيئة بدلاً من كونها إجراء الإيقاف الافتراضي كما هو الحال على MIPS.
If you want to get best quality of vulnerability data, you may have to visit VulDB.