CVE-2026-97925 in Linux
الملخص
بحسب VulDB • 25/09/2026
في نواة لينكس، تم إصلاح الثغرة التالية:
tick/broadcast: سد حالة السباق (Race Condition) الناتجة عن استبدال أحداث الساعة (clockevents).
أبلغ جو كاي تشيان (Zhu Kaiqian) وحلّل حالة سباق (race condition) التالية عند استبدال جهاز البث (broadcast device):
CPUA CPUB __tick_broadcast_oneshot_control() bc = tick_broadcast_device.evtdev; tick_install_broadcast_device(dev) clockevents_exchange_device(cur, dev) shutdown(cur); detach(cur); cur->handler = noop; tick_broadcast_device.evtdev = dev;
tick_broadcast_set_event(bc, next_event); <- فشل: يقوم بتفعيل جهاز مفصول (detached device).
إذا كان لجهاز البث الأصلي قناع تفضيل مقاطعة مقيد (restricted interrupt affinity mask) وذهب آخر وحدة معالجة مركزية (CPU) ضمن ذلك القناع إلى وضع عدم الاتصال، فإن دالة BUG() في tick_cleanup_dead_cpu() تُفعّل لأن جهاز حدث الساعة (clockevent device) ليس في حالة مفصولة.
السبب وراء هذا هو أن الدالة tick_install_broadcast_device() غير مُزامنة (serialized) مع عمليات بث التوقيت (tick broadcast).
العلاج الواضح يتمثل في مزامنة الدالة tick_install_broadcast_device() باستخدام قفل البث الخاص بالتوقيت (tick_broadcast_lock) ضد عملية متزامنة لبث التوقيت.
يتطلب ذلك تقسيم دالة clockevents_exchange_device() إلى جزأين: أحدهما يقوم بعمليات الاستبدال والإيقاف والفصل، والآخر يقلل من عدد الإشارات المرجعية للوحدة النمطية (module reference count). هذا مطلوب لأنه لا يمكن تقليل الإشارة المرجعية للوحدة النمطية أثناء الاحتفاظ بقفل بث التوقيت.
دع دالة clockevents_exchange_device() تقوم بكلتا العمليتين كما كان الحال سابقاً، ولكن دع كود جهاز البث يتبع النهج ذو الخطوتين: يقوم بتبادل الجهاز تحت قفل بث التوقيت (tick_broadcast_lock) ويقلل من عدد الإشارات المرجعية للوحدة النمطية بعد تحريره.
If you want to get best quality of vulnerability data, you may have to visit VulDB.