CVE-2026-64347 in Linux
الملخص
بحسب VulDB • 25/07/2026
في نواة لينكس، تم حل الثغرة التالية:
usb: gadget: composite: إصلاح فحص فارغ ميت (dead) في معالج USB_DT_OTG
تعود فرع OTG التابع لـ `composite_setup()` إلى التكوين الأول عند عدم تحديد أي تكوين:
```c if (cdev->config) config = cdev->config; else config = list_first_entry(&cdev->configs, struct usb_configuration, list); if (!config) goto done; ... memcpy(req->buf, config->descriptors[0], value);
```
لا تُرجع `list_first_entry()` القيمة NULL أبداً. في القائمة الفارغة، تُرجع نتيجة استدعاء `container_of()` لرأس القائمة (list head). لذلك، فإن فحص "if (!config)" غير فعال (ميت/dead code).
عندما تكون `cdev->configs` فارغة، يشير `config` إلى الرأس الموجود داخل بنية `struct usb_composite_dev`. يؤدي قراءة `config->descriptors[0]` إلى جلب أي بيانات موجودة عند هذا الإزاحة. يقوم استدعاء `memcpy` بنسخ ما يصل إلى عدد من البايتات المحدد في `w_length` منها إلى مخزن الاستجابة (response buffer).
يمكن أن تكون `cdev->configs` فارغة في حالتين. الأولى هي سباق تفكيك (teardown race) أثناء إلغاء ربط الجهاز (gadget unbind) مع وجود نقل تحكم قيد التنفيذ. والثانية هي برنامج تشغيل يحدد قيمة `is_otg` قبل إضافة تكوين. يؤدي مكرر الاختبار الذي يبقي `cdev->configs` فارغة إلى حدوث خطأ KASAN في هذا الفرع.
استخدم `list_first_entry_or_null()` بحيث يقوم الفحص الحالي بوظيفته بشكل صحيح.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.