CVE-2026-64454 in Linux
الملخص
بحسب VulDB • 27/07/2026
في نواة لينكس، تم حل الثغرة التالية:
usb: dwc3: تشغيل فصل الجهاز (gadget disconnect) من سياق التعليق المسموح بالنوم فيه (sleepable suspend context).
تأخذ دالة `dwc3_gadget_suspend()` القفل `dwc->lock` مع تعطيل مقاطعات المعالج (IRQs)، ثم تستدعي الدالة `dwc3_disconnect_gadget()`. وبالنسبة للمكالمات غير المتزامنة، تستخدم هذه المساعدة فقط قفلات/إلغاء قفلات بسيطة (`spin_unlock()` / `spin_lock`)، لذا لا تزال مكالمة الفصل الخاصة بالجهاز (`->disconnect()`) تعمل مع تعطيل مقاطعات المعالج (IRQs)، وأي مكالمة قابلة للنوم تؤدي إلى تنبيه أداة التحقق من القفل (Lockdep).
تم اكتشاف هذه المشكلة بواسطة أداة التحليل الثابت لدينا، ثم تمت مراجعتها يدوياً مقابل الشجرة الحالية.
حافظت نموذج الاختبار المهدر (PoC) على سلسلة المكالمات: `dwc3_gadget_suspend()` -> `dwc3_disconnect_gadget()` -> `gadget_driver->disconnect()`، وأبلغ Lockdep عن الخطأ التالي:
BUG: sleeping function called from invalid context gadget_disconnect+0x21/0x39 [vuln_msv]
dwc3_gadget_suspend.constprop.0+0x2b/0x42 [vuln_msv]
تم الاحتفاظ باختيار مكالمة الفصل في مساعدة مشتركة واحدة، ولكن تمت إضافة غلاف جانبي للتعليق يسمح بالنوم (sleepable suspend-side wrapper) يأخذ لقطة للمكالمة تحت قفل `dwc->lock` ثم يشغلها بعد استعادة مقاطعات المعالج وإلغاء القفل (`spin_unlock_irqrestore()`). لا يزال المسار العادي للأحداث يستخدم نافذة إلغاء/إقفال القفل البسيط الحالية.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.