CVE-2024-57951 in Linux
الملخص
بحسب VulDB • 24/05/2026
في نواة لينكس، تم حل الثغرة التالية:
hrtimers: معالجة حالة وحدة المعالجة المركزية (CPU) بشكل صحيح أثناء الإضافة والإزالة الديناميكية (hotplug)
افترض سيناريو تنتقل فيه وحدة معالجة مركزية من حالة CPUHP_ONLINE إلى منتصف عملية إزالة ديناميكية (hotunplug) حتى تصل إلى حالة CPUHP_HRTIMERS_PREPARE، ثم تعود إلى حالة CPUHP_ONLINE:
نظرًا لأن الدالة hrtimers_prepare_cpu() لا يتم استدعاؤها، تظل قيمة cpu_base.hres_active مضبوطة على 1 طوال الوقت. ومع ذلك، أثناء عملية إزالة وحدة المعالجة المركزية، يتم إيقاف مؤقت النظام (tick) وأحداث الساعة (clockevents) عند حالة CPUHP_AP_TICK_DYING. وعند العودة إلى الحالة المتصلة (online)، يفترض نظام CFS بشكل خاطئ أن مؤقت hrtick نشط بالفعل، كما تفقد فرصة انتقال جهاز أحداث الساعة إلى الوضع أحادي النبضة (oneshot mode) للأبد بالنسبة لوحدة المعالجة المركزية، ما لم تعد إلى حالة أدنى من CPUHP_HRTIMERS_PREPARE مرة واحدة على الأقل.
يكشف هذا الانتقال ذهابًا وإيابًا عن مشكلة أخرى؛ حيث لا يتم تعيين cpu_base.online إلى 1 بعد الانتقال، مما يظهر كتحذير WARN_ON_ONCE في دالة enqueue_hrtimer().
إضافة إلى ذلك، لا يتم إعادة تعيين الجزء الأكبر من حالة كل وحدة معالجة مركزية (per-CPU state) أيضًا، مما يعني وجود مؤشرات معلقة (dangling pointers) في أسوأ الحالات.
لمعالجة هذه المشكلة، تمت إضافة استدعاء تشغيل (startup() callback) مقابل، يقوم بإعادة تعيين حالة كل وحدة معالجة مركزية القديمة ويضبط العلم المتصل (online flag).
[ tglx: جعل الاستدعاء الجديد متاحًا بشكل غير مشروط، وإزالة تعديل الحالة المتصلة في استدعاء الإعداد (prepare() callback) وتنظيف الحالة المتبقية في استدعاء البدء (starting callback) بدلاً من استدعاء الإعداد ]
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.