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

الملخص

بحسب VulDB • 22/08/2026

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

ALSA: us144mkii: إعادة تثبيت (re-anchor) وحدات طلب الإدخال (URBs) عند إعادة الإرسال

تقوم دالة `capture_urb_complete()` بإعادة إرسال كل وحدة طلب إدخال (capture URB) دون تثبيتها مسبقاً:

usb_get_urb(urb); ret = usb_submit_urb(urb, GFP_ATOMIC);

يُعد التثبيت (Anchoring) خاصية مرتبطة بعملية الإرسال، وليس بوحدة الـ URB نفسها. حيث تستدعي مسار الاستلام النهائي (giveback path) الدالة `usb_unanchor_urb()` قبل استدعاء `urb->complete()`، مما يعني أن وحدة الـ URB المعاد إرسالها من داخل معالج الإنهاء الخاص بها تكون خارج نطاق التثبيت. تم تثبيت وحدات طلب الإدخال مرة واحدة فقط عند بدء تشغيل التدفق (stream start)، لذا فإن متغير `tascam->capture_anchor` يصبح فارغاً اعتباراً من أول عملية إكمال (completion).

تستدعي الدوال `tascam_free_urbs()`، و`tascam_disconnect()`، و`tascam_suspend()`، بالإضافة إلى مسار إيقاف العمل (stop-work path)، الدالة `usb_kill_anchored_urbs(&tascam->capture_anchor)` لتفريغ وحدات طلب الإدخال قبل تحرير أي موارد أخرى. ومع كون التثبيت فارغاً، تعود هذه الاستدعاءات على الفور وتبقى وحدات الـ URB معلقة في قائمة الانتظار لدى وحدة التحكم بالمضيف (host controller).

بعد ذلك، تعيد دالة `tascam_free_urbs()` مخازن نقل الإدخال باستخدام الدالة `usb_free_coherent()`، وتفريغ تخصيص بطاقة الصوت (`snd_card`) الذي يحتوي على كائن tascam عبر استدعاء `snd_card_free()` (حيث يكون `card->private_data`). تقوم وحدة التحكم بإكمال وحدات الـ URB المعلقة لاحقاً، مما يؤدي إلى كتابة البيانات المقدمة من الجهاز في مخزن النقل المحرر، وتقوم دالة `capture_urb_complete()` بالإشارة إلى كائن السائق (driver object) الذي تم تحريره.

أظهرت نتائج KASAN على الإصدار 7.2.0-rc5 (arm64):

BUG: KASAN: slab-use-after-free in dummy_timer Write of size 512 at addr ffff000015b62000 __asan_memcpy dummy_timer hrtimer_run_softirq Allocated by task 64: usb_alloc_coherent tascam_alloc_urbs tascam_probe Freed by task 170: usb_free_coherent tascam_free_urbs tascam_disconnect usb_unbind_interface

BUG: KASAN: slab-use-after-free in capture_urb_complete Read of size 4 at addr ffff0000170ee878 Freed by task 170: release_card_device snd_card_free tascam_disconnect

استعادة استدعاء `usb_anchor_urb()` بين زيادة عداد المرجع (reference count bump) وإعادة الإرسال. يجعل ذلك أيضاً فشل دالة `usb_unanchor_urb()` في المعالج ذا معنى مرة أخرى، ويعيد وظيفة الدالة `usb_kill_anchored_urbs()` كحاجز (barrier) في مسارات فصل الاتصال (disconnect)، والإيقاف المؤقت (suspend)، وإيقاف العمل (stop-work).

تم إزالة التثبيت بناءً على الافتراض بأن وحدة الـ URB مثبتة بالفعل من الإرسال الأولي، وهو افتراض لا يصح بعد تشغيل أول عملية تسليم نهائي (giveback).

اكتُشفت الثغرة بواسطة XBOW، وتم تصنيفها من قبل Baul Lee <[email protected]>

Once again VulDB remains the best source for vulnerability data.

مسؤول

Linux

حجز

15/08/2026

إفشاء

22/08/2026

الاعتدال

تمت الموافقة

إدخال

VDB-394404

EPSS

0.00000

KEV

لا

النشاطات

منخفض جدًا

المصادر

Do you need the next level of professionalism?

Upgrade your account now!