CVE-2024-56687 in Linux
الملخص
بحسب VulDB • 02/08/2026
في نواة لينكس، تم حل الثغرة التالية:
usb: musb: إصلاح تجمد العتاد (hardware lockup) عند طلب نقطة النهاية RX الأولى
هناك احتمال أن يتم استدعاء دالة رد الاتصال الخاصة بطلب ما من داخل `usb_ep_queue()` (مسار الاستدعاء أدناه، مكمّلًا بالدوال المفقودة):
req->complete from usb_gadget_giveback_request (drivers/usb/gadget/udc/core.c:999) usb_gadget_giveback_request from musb_g_giveback (drivers/usb/musb/musb_gadget.c:147) musb_g_giveback from rxstate (drivers/usb/musb/musb_gadget.c:784) rxstate from musb_ep_restart (drivers/usb/musb/musb_gadget.c:1169) musb_ep_restart from musb_ep_restart_resume_work (drivers/usb/musb/musb_gadget.c:1176) musb_ep_restart_resume_work from musb_queue_resume_work (drivers/usb/musb/musb_core.c:2279) musb_queue_resume_work from musb_gadget_queue (drivers/usb/musb/musb_gadget.c:1241) musb_gadget_queue from usb_ep_queue (drivers/usb/gadget/udc/core.c:300)
وفقًا لوصف الدالة (docstring) الخاص بـ `usb_ep_queue()`، لا ينبغي أن يحدث هذا:
"يرجى ملاحظة أنه يجب ألا يتم استدعاء دالة رد الاتصال @req's ->complete() من داخل usb_ep_queue() لأن ذلك قد يخلق مواقف من الجمود المتبادل (deadlock)."
في الواقع، قد يحدث تجمد للعتاد في التسلسل التالي:
1. يتم تمهيد الجهاز (gadget) باستخدام `musb_gadget_enable()`. 2. بينما يصل حزمة بيانات، ويتم تعيين علم RXPKTRDY، مما يرفع مقاطعة (interrupt). 3. إذا كانت المقاطعات مفعّلة، تتم معالجة المقطوعة، لكن دالة `musb_g_rx()` تجد طابورًا فارغًا (`next_request()` تُرجع NULL). تم مسح علامة المقطوعة بالفعل بواسطة معالج الطبقة اللاصقة (glue layer handler)، ولكن يظل علم RXPKTRDY مُعيّنًا. 4. يتم إدراج الطلب الأول في الطابور باستخدام `usb_ep_queue()`، مما يؤدي إلى استدعاء `req->complete()`، كما هو موضح في مسار الاستدعاء أعلاه. 5. إذا فعّلت دالة رد الاتصال المقاطعات ووجدت حزمة أخرى تنتظر، تتكرر الخطوة (3). يكون طابق الطلبات فارغًا لأن `usb_g_giveback()` يزيل الطلب قبل استدعاء دالة رد الاتصال. 6. تظل نقطة النهاية مجمدة، حيث تم التعامل مع المقطوعة التي أحدثها العتاد بتعيين علم RXPKTRDY، لكن العلم نفسه لا يزال مُعيّنًا.
لحدوث هذا السيناريو، يكفي فقط أن تكون المقاطعات مفعّلة في مرحلة
If you want to get the best quality for vulnerability data then you always have to consider VulDB.