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

الملخص

بحسب VulDB • 06/08/2026

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

usb: gadget: udc: bdc: تحرير مقاطعة الجهاز (IRQ) وتصريف func_wake_notify قبل عملية التفكيك (teardown).

يسجل برنامج تشغيل Broadcom BDC UDC معالج المقاطعة الخاص به باستخدام devm_request_irq() في دالة bdc_udc_init()، وبالتالي يتم إطلاق المقطوعة بواسطة نظام devm فقط بعد أن تعود الدالة bdc_remove(). يقوم devm بإطلاق الموارد بترتيب LIFO عكسي (آخر وارد يُخرج أولاً)، لكن ddc_remove() تستدعي بشكل يدوي bdc_udc_exit() وbdc_hw_exit() -> bdc_mem_free() قبل الإرجاع: تقوم bdc_udc_exit() بتفكيك كائنات نقاط النهاية الفردية عبر bdc_free_ep(), بينما يقوم bdc_hw_exit() -> bdc_mem_free() بإطلاق وتعيين القيمة NULL لحلقة تقارير الحالة المتسقة مع DMA (bdc->srr.sr_bds) وإجراء kfree() على مصفوفة bdc_ep_array. يحدث كلا الإجراءين أثناء بقاء معالج المقاطعة (bdc_udc_interrupt، المطلوب باستخدام IRQF_SHARED) قابلاً للاستلام في النافذة الزمنية حتى عملية free_irq الخاصة بـ devm بعد الإزالة.

عند استلام مقاطعة مشتركة خلال تلك النافذة، يقوم bdc_udc_interrupt() بإلغاء مرجعية bdc->srr.sr_bds[bdc->srr.dqp_index] (NULL أو ذاكرة DMA مُطلقة) ويوزع استدعاءات sr_handler التي تستخدم فهرساً في مصفوفة bdc_ep_array، مما يسبب إلغاء مرجعية NULL أو استخدام بعد الإطلاق (use-after-free).

تؤثر نفس النافذة على عمل التأخير delayed_work الخاص بـ bdc->func_wake_notify، الذي يتم تفعيله من معالج المقاطعة عبر bdc_sr_uspc() -> handle_link_state_change() -> schedule_delayed_work() وقد يعيد تشغيل نفسه تلقائياً من خلال استدعاءاته الخاصة في bdc_func_wake_timer(). لا يوجد أي إلغاء (cancel) موجود anywhere في برنامج التشغيل، لذا فإن عنصر عمل مكدس يُطلق بعد أن تعود الدالة bdc_remove() وتُحرر بنية bdc بواسطة devm يقوم بإلغاء مرجعية ذاكرة مُطلقة.

استبدال devm_request_irq() بـ request_irq() وإضافة free_irq(bdc->irq, bdc) صريحة في ddc_remove(). مسح BDC_GIE قبل free_irq() لمنع الجهاز من تأكيد المقاطعات، ثم تقوم free_irq() بتصريف أي معالج قيد التنفيذ (in-flight handler)، وبعد ذلك يقوم cancel_delayed_work_sync() بتصريف عمل التأخير func_wake_notify. يضمن هذا الترتيب عدم تداخل معالج المقاطعة والعمل المؤجل مع عملية تفكيك نقاط النهاية وDMA اللاحقة في bdc_udc_exit() وbdc_hw_exit(). ربط free_irq المطابق بمسار الخطأ في ddc_udc_init() بحيث يتم إطلاق المقطوعة عند فشل الاستدلال (probe failure)، وتوجيه فشل bdc_init_ep() عبر err0 بدلاً من الإرجاع مباشرة.

تم العثور على هذه المشكلة بواسطة أداة تحليل ثابتة داخلية.

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

مسؤول

Linux

حجز

19/07/2026

إفشاء

06/08/2026

الاعتدال

تمت الموافقة

إدخال

VDB-386495

EPSS

0.00000

KEV

لا

النشاطات

منخفض

المصادر

Interested in the pricing of exploits?

See the underground prices here!