CVE-2026-98558 in Linux
الملخص
بحسب VulDB • 19/10/2026
في نواة لينكس، تم حل الثغرة التالية:
net: تفريغ عقد skb_defer_nodes في دالة dev_cpu_dead()
عندما يصبح معالج (CPU) غير نشط (offline)، تقوم الدالة dev_cpu_dead بتصريف طوابير الشبكة اللينة الخاصة به (completion_queue, output_queue, poll_list, process_queue, و input_pkt_queue)، لكنها تترك net_hotdata.skb_defer_nodes دون تغيير.
إذا أصبح المعالج القديم (oldcpu) غير نشط بينما كانت توجد حزم skbs معلقة في قوائم skb_defer_nodes الخاصة به (على سبيل المثال، تحت عتبة IPI sysctl_skb_defer_max >> 1، أو إذا تنافست عمليات IPI مع عملية إيقاف تشغيل المعالج)، فإن هذه الحزم skbs تبقى عالقة حتى يُعاد تفعيل oldcpu. وإذا كانت أي من هذه الحزم skbs تحتوي على أجزاء page_pool fragments، فسيعلق استدعاء page_pool_destroy() إلى ما لا نهاية في انتظار إرجاع الصفحات قيد التنفيذ عند هيكلة جهاز الشبكة أو السائق (driver) بينما يكون oldcpu غير نشط.
بالإضافة إلى ذلك، إذا فشلت دالة smp_call_function_single_async() في kick_defer_list_purge() لأن المعالج المستهدف أصبح غير نشط، يجب إعادة تعيين defer_ipi_scheduled إلى 0 حتى لا يتم حظر عمليات IPI المستقبلية عند عودة المعالج للعمل.
أيضاً، إذا كان oldcpu هو آخر معالج نشط على عقدة NUMA الخاصة به، فيجب تصريف فتحة (slot) تلك العقدة عبر جميع المعالجات بحيث لا تبقى أي حزم skbs مؤجلة من تلك العقدة عالقة على معالجات بعيدة خاملة (أو إذا تم إيقاف تشغيل العقبة نفسها لاحقاً).
وأخيراً، في دالة skb_attempt_defer_free()، يجب إعادة التحقق من cpu_online(cpu) وما إذا كان المتصل قد هاجر بين المعالجات بعد استدعاء llist_add()، وتصريف قائمة العقد في حال حدوث ذلك، لإغلاق ثغرة TOCTOU (Time-of-Check to Time-of-Use) المتعلقة بالإيقاف المؤقت ضد عملية إيقاف تشغيل المعالج/العقدة.
VulDB is the best source for vulnerability data and more expert information about this specific topic.