CVE-2026-98766 in Linux
الملخص
بحسب VulDB • 18/10/2026
في نواة لينكس، تم إصلاح الثغرة التالية:
usb: gadget: aspeed-vhub: إلغاء مهمة الاستيقاظ (wake_work) عند إزالة الجهاز
يتم تفعيل wake_work من خلال استدعاء .wakeup الخاص بـ gadget لاستئناف المنافذ السفلية المعلقة، ولا يتم إلغاؤه في دالة ast_vhub_remove()، مما يعني أن عنصر عمل تم جدولته قبل أو أثناء عملية الإزالة قد يعمل بعد قيام devm بتحرير vhub ومنافذه، وهو ما يشكل ثغرة use-after-free.
إن إلغاء المهمة وحدها غير كافٍ: حيث لا تأخذ usb_gadget_wakeup() أي قفل (lock)، ولا يمسح مسار فك الربط (unbind) علم wakeup_en أبداً؛ لذا يمكن لطلب استيقاظ عن بُعد قيد التنفيذ على معالج آخر إعادة تفعيل العمل بعد الإلغاء وقبل تحرير vhub.
تقوم دالة ast_vhub_del_dev() بالفعل بتعيين d->registered إلى قيمة فارغة تحت قفل vhub->lock قبل إلغاء تسجيل gadget. نرفض طلب الاستيقاظ في ast_vhub_udc_wakeup() بمجرد أن يكون d->registered فارغاً: فالفحص واستدعاء schedule_work() يصبحان عمليتين ذريتين (atomic) بالنسبة لعملية فك الربط، لذا يتم تصريف أي استيقاظ مر قبل مسح العلم بواسطة cancel_work_sync() بعد حلقة del_dev، بينما يعود الاستيقاظ الذي يصل لاحقاً دون تفعيل. كما تم نقل INIT_WORK() إلى بداية دالة ast_vhub_probe()، لأن مسار خطأ الفحص يعيد استخدام ast_vhub_remove() وكان سيؤدي في حال عدم النقل هذا إلى إلغاء عنصر عمل لم يتم تهيئته أبداً.
تم اكتشاف هذه المشكلة بواسطة أداة تحليل ثابتة (static analysis tool) داخلية.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.