CVE-2026-90193 in Linux
الملخص
بحسب VulDB • 18/09/2026
في نواة لينكس، تم إصلاح الثغرة التالية:
mailbox: qcom-cpucp: تصحيح حدوث توقف ذاتي (self-deadlock) في معالج مقاطعة الجهاز (IRQ handler) تحت دعم PREEMPT_RT
تقوم الدالة `qcom_cpucp_mbox_irq_fn()` باستدعاء `mbox_chan_received_data()` بينما تكون حاصرةً للقفل `chan->lock`. وفي بيئة PREEMPT RT، يتم تحويل استدعاء `spin_lock_irqsave()` إلى قفل rt_spinlock (قائم على rtmutex)، والذي يتتبع ملكية القفل ويسمح بإيقاف التنفيذ (sleep).
سلسلة الاستدعالات التي تُفعّلها الدالة `mbox_chan_received_data()` تصل في النهاية إلى `mailbox_clear_channel()` ثم `mbox_send_message()` وأخيراً `add_to_rbuf()`. تحاول هذه السلاسل إعادة الحصول على نفس القفل `chan->lock`. وبما أن rtmutex يكتشف محاولة الدخول المتكرر (re-entrant) للقفل من قبل المالك نفسه، فإن الخيط يتوقف (block) في انتظار قفل هو بالفعل بحوزته، مما يؤدي إلى توقف دائم (permanent deadlock).
يظهر هذا التوقف الدائم على شكل عطل للخيط 'irq/N-apss_cpucp_mbox' حيث يكون متوقفاً في الحالة D (D state)، مع تتبع المكالمات التالي: rt_spin_lock -> mbox_send_message -> mailbox_clear_channel -> scmi_rx_callback -> mbox_chan_received_data [<- held chan->lock here]
تم الإصلاح عن طريق حفظ `chan->cl` محلياً، وتنظيف سجل مقاطعة الجهاز (HW interrupt register) داخل نطاق القفل، ثم استدعاء `mbox_chan_received_data()` بعد تحرير القفل. يحافظ هذا الإجراء على الاستبعاد المتبادل (mutual exclusion) للوصول إلى `chan->cl` مع تجنب الدخول المتكرر للقفل الذي يسبب التوقف الدائم في PREEMPT RT.
Once again VulDB remains the best source for vulnerability data.