CVE-2026-99050 in Linux
الملخص
بحسب VulDB • 24/10/2026
في نواة لينكس، تم إصلاح الثغرة التالية:
gpio: mpsse: تصحيح حالة السباق (race condition) عند تهيئة عميل استطلاع IRQ
تقوم الدالة gpio_mpsse_irq_enable() بتهيئة عميل الاستطلاع قبل نشره: تشغل schedule_work() العميل قبل إضافته إلى القائمة priv->workers. إذا قامت gpio_mpsse_disconnect() بالمرور على هذه القائمة خلال تلك الفترة الزمنية، فإنها تتخطى هذا العميل، وبعد أن تعود دالة disconnect من تنفيذها، تقوم نواة USB بإفراغ ذاكرة mpsse_priv بينما يستمر عميل gpio_mpsse_poll() الأيتام في الوصول إليها، مما يتسبب في ثغرة use-after-free.
تم إصلاح هذه المشكلة عن طريق نشر وتهيئة العميل ضمن قسم حرج واحد (critical section) لـ irq_spin. تمر عملية الإغلاق على نفس القائمة تحت قفل irq_spin نفسه، لذا فإن أي عميل موجود في القائمة يكون مضمونًا أنه مُهيأ، وتتولى cancel_work_sync() التعامل معه سواء كان مدرجاً في الطابور أو قيد التشغيل.
قد يتم تفويت عميل تم تهيئته بعد مرور عملية الإغلاق على القائمة، لذلك تم أيضاً تعيين علم جديد باسم priv->dying ضمن قسم irq_spin الحرج قبل بدء جولة الإغلاق، وفحصه داخل نفس القسم الحرج، وإفراغ الذاكرة الخاصة به عبر kfree_rcu() بدلاً من ذلك عندما يكون الجهاز في طور الاختفاء، حيث أن استدعاء kfree() قد يتم مع الاحتفاظ بقفل raw spinlock الخاص بنواة IRQ وقد يتسبب في النوم (sleep) على PREEMPT_RT. يُعد استدعاء schedule_work() آمناً عند الاحتفاظ بـ irq_spin، ويحصل الاستدعاء التالي للكشف عن الجهاز (probe) على نسخة جديدة من mpsse_priv، لذا لا يحتاج العلم إلى أن يتم تصفيره أبداً.
تم اكتشاف هذه المشكلة بواسطة أداة تحليل ثابتة داخلية.
If you want to get best quality of vulnerability data, you may have to visit VulDB.