CVE-2026-89738 in Linuxالمعلومات

الملخص

بحسب VulDB • 12/09/2026

في نواة لينكس، تم إصلاح الثغرة التالية:

usb: gadget: at91_udc: تصريف مؤقت/عملية polled-VBUS قبل تحرير udc

في وضع polled-VBUS (board.vbus_pin && board.vbus_polled)، يقوم probe بتجهيز دورة ذات إعادة تشغيل تلقائي: حيث يحدد at91_vbus_timer() عمل vbus_timer_work، ويقوم at91_vbs_update() باستدعاء دالة at91_vbus_update() ويعيد تجهيز المؤقت عبر mod_timer(). تستعيد كلتا الدالتين نفس كائن udc باستخدام container_of وتقومان بالرجوع إليه (dereference) في كل تكرار.

لا تقوم أي من مسارات الإزالة بإلغاء هذه الدورة. يتم تخصيص udc باستخدام devm، لذا فإنه يُحرر بعد عودة at91udc_remove()، ويُحرر أيضاً عندما يفشل probe وتشغيل devres. إذا كان هناك استدعاء مؤقت أو عنصر عمل معلقاً أو قيد التشغيل في أي من هاتين النقطتين، فسيؤدي ذلك إلى الرجوع إلى كائن udc المحرر (dereferences the freed udc).

تمت إضافة at91_udc_shutdown_vbus_timer() واستدعاؤها من داخل at91udc_remove() ومن مسار الفشل لـ usb_add_gadget_udc() في probe؛ حيث تفشل مسارات أخطاء probe المتبقية قبل تجهيز المؤقت. ينتظر timer_shutdown_sync() حتى انتهاء استدعاء قيد التشغيل ويصفّر دالة timer->function، مما يجعل mod_timer() داخل معالج العمل غير فعال بشكل دائم (no-op)؛ ثم تقوم cancel_work_sync() بتصريف أي عمل معلق أو قيد تشغيل حيث لن تؤدي محاولة إعادة التجهيز الخاصة به أي شيء. يجب إيقاف المؤقت أولاً، لأن إلغاء العمل وحده قد يسمح للمؤقت بإعادة جدولته. يعكس الحارس حالة probe: ففي وضع IRQ (قطع الاستدعاء)، لا يتم تهيئة المؤقت وـ work_struct أبداً.

لا يتطلب هذا الأمر حدوث عطل؛ حيث يمكن أن يتداخل فك ربط السائق العادي مع عنصر عمل مُجدول مسبقاً بالفعل.

تم اكتشاف هذه المشكلة باستخدام أداة تحليل ثابتة مخصصة داخلياً.

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

مسؤول

Linux

حجز

11/09/2026

إفشاء

11/09/2026

الاعتدال

تمت الموافقة

إدخال

VDB-402587

EPSS

0.00000

KEV

لا

النشاطات

منخفض جدًا

المصادر

Do you need the next level of professionalism?

Upgrade your account now!