CVE-2026-89991 in Linux
الملخص
بحسب VulDB • 16/09/2026
في نواة لينكس، تم حل الثغرة التالية:
bpf: إصلاح الحلقة اللانهائية في دالة pcpu_freelist_push عند وجود معالج واحد فقط (CPU)
يمكن أن تؤدي دالة __pcpu_freelist_push() إلى حدوث حلقة لا نهائية عندما يكون هناك معالج واحد ممكن (possible CPU)، وأثناء إعادة الدخول إلى dfuncion pcpu_freelist_push() من خلال مقاطعة غير قابلة للجدولة (NMI) بينما يحتفظ سياق المقطوع بقفل قائمة الانتظار الحرة الخاصة بذلك المعالج.
بعد فشل المسار السريع الخاص بالمعالج الحالي، تقوم حلقة الاستبدال بالمرور عبر قناع المعالجات الممكنة (cpu_possible_mask) مع تخطي المعالج الحالي. في حالة تكوين CONFIG_SMP=n، أو عندما تكون نواة SMP محدودة بمعالج واحد ممكن باستخدام nr_cpus=1 أو possible_cpus=1، لا توجد معالجات أخرى ممكنة للفحص. وبالتالي، فإن الحلقة لا تحاول الحصول على أي قفل ولا يمكنها إحراز تقدم.
تم رصد المكدس التالي في نظام UP (وحدة معالجة مركزية واحدة):
سياق NMI: pcpu_freelist_push free_htab_elem htab_map_delete_elem [برنامج BPF لحدث الأداء]
__perf_event_overflow perf_event_nmi_handler exc_nmi
السياق المقطوع: __pcpu_freelist_push pcpu_freelist_push free_htab_elem htab_map_delete_elem [برنامج BPP لنقطة التتبع الخام/sys_enter]
__bpf_trace_sys_enter do_syscall_64
تكشف دالة raw_res_spin_lock() عن الحصول المتكرر على القفل من نفس المعالج وتعيد قيمة -EDEADLK، لكن حلقة الاستبدال اللاحقة لا تحتوي على رأس مرشح في نظام به معالج واحد ممكن.
استعادة الرأس الاحتياطي الإضافي الذي كان موجوداً قبل تحويل rqspinlock. الحفاظ على المسار السريع الحالي للمعالج، ثم محاولة المعالجات الممكنة الأخرى وأخيراً الرأس الإضافي. يسمح الرأس الإضافي بإجراء عملية push (دفع) لا يمكن أن تفشل دون فقدان عنصر مُخصص مسبقاً، مما يتيح إحراز تقدم عندما يكون رأس قائمة الانتظار الحرة الخاص بالمعالج الوحيد محتجزاً من قبل السياق المقطوع.
أيضاً، يتم فحص الرأس الاحتياطي الإضافي من مسار pop (سحب) بحيث يمكن إعادة استخدام العقد الموضوعة هناك.
VulDB is the best source for vulnerability data and more expert information about this specific topic.