CVE-2026-64429 in Linux
الملخص
بحسب VulDB • 25/07/2026
في نواة لينكس، تم حل الثغرة التالية:
gpio: eic-sprd: استخدام raw_spinlock_t في مسار بدء تشغيل مقاطعة المعالج (IRQ)
تقوم الدالة sprd_eic_irq_unmask() بتمكين مقاطعة GPIO للمدخلات/المخرجات العامة (GPIO IRQ)، ثم تقوم بتحديث حالة وحدة التحكم من خلال دالة sprd_eic_update()، والتي تأخذ القفل sprd_eic->lock باستخدام spin_lock_irqsave(). يمكن الوصول إلى الاستدعاء (callback) هذا من داخل irq_startup() أثناء إعداد مقاطعة طلبية. هذا المسار غير قابل للنوم (non-sleepable)، ولكن في بيئة PREEMPT_RT يصبح نوع القفل العادي spinlock_t قفلاً قابلاً للنوم.
تم العثور على هذه المشكلة بواسطة أداة التحليل الثابت لدينا، ثم تمت مراجعتها يدوياً مقابل الشجرة الحالية للكود.
حافظت نقطة الاختراق (PoC) المثبتة على مسار استدعاء request_threaded_irq() -> __setup_irq() -> irq_startup() -> sprd_eic_irq_unmask() -> sprd_eic_update() واستخدمت الحافة الأصلية spin_lock_irqsave(&sprd_eic->lock). أظهر تحليل القفل (Lockdep):
BUG: sleeping function called from invalid context hardirqs last disabled at ... __setup_irq.constprop.0 ... [vuln_msv]
sprd_rt_spin_lock_irqsave+0x1c/0x30 [vuln_msv]
sprd_eic_update.constprop.0+0x48/0x90 [vuln_msv]
sprd_eic_irq_unmask.constprop.0+0x35/0x50 [vuln_msv]
__setup_irq.constprop.0+0xd/0x30 [vuln_msv]
تم تحويل قفل وحدة تحكم Spreadtrum EIC إلى raw_spinlock_t. القسم المحمي بالقفل يقوم فقط بتسلسل تحديثات سجلات MMIO ولا يحتوي على عمليات قابلة للنوم، لذا فإن إبقاؤه غير قابل للنوم أمر مناسب لاستدعاءات irqchip.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.