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

الملخص

بحسب VulDB • 27/05/2026

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

ALSA: caiaq: إصلاح تسرب عدّ المراجع (refcount) لـ usb_dev عند فشل عملية الاستكشاف (probe)

تأخذ الدالة create_card() مرجعًا على جهاز USB باستخدام usb_get_dev() وتخزن استدعاء usb_put_dev() المقابل في card_free()، والتي تُثبَّت كمُدمِّر (destructor) للحقل ->private_free الخاص بـ snd_card.

ومع ذلك، لا يتم تعيين ->private_free إلا في نهاية init_card()، بعد عدة نقاط محتملة للفشل (مثل usb_set_interface()، وفحوصات نوع نقطة النهاية (EP type checks)، وusb_submit_urb()، وتبادل EP1_CMD_GET_DEVICE_INFO، وانتهاء مهلة هذا التبادل). عندما يفشل أي من هذه العمليات، تُرجع init_card() خطأً إلى snd_probe()، والتي بدورها تستدعي snd_card_free(card). ونظرًا لأن ->private_free لا يزال NULL، فإن card_free() لا تُنفَّذ أبدًا، ولا يتم تخفيض مرجع usb_get_dev()، مما يؤدي إلى تسرب بنية struct usb_device بالإضافة إلى تخصيصات الوصف (descriptor allocations) وdevice_private الخاصة بها.

أعاد syzbot إنتاج هذه الحالة باستخدام جهاز UAC3 غير صالح (malformed) تكون فيه الإعدادات البديلة (altsetting) الصالحة الوحيدة هي 0؛ حيث يفشل استدعاء init_card()'s لـ usb_set_interface(usb_dev, 0, 1) بـ -EIO ويثير التسرب.

تم نقل تعيين ->private_free إلى create_card()، مباشرة بعد usb_get_dev()، بحيث يوازن كل مسار خطأ يصل إلى snd_card_free() المرجع. تتحمل الدوال التي تستدعيها card_free() (snd_usb_caiaq_input_free، free_urbs، kfree) الحالة غير المكتملة التهيئة بالفعل، لأن المنطقة الخاصة بالرقاقة (chip private area) يتم تهيئتها بالصفر بواسطة snd_card_new().

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

مسؤول

Linux

حجز

13/05/2026

إفشاء

27/05/2026

الاعتدال

تمت الموافقة

إدخال

VDB-366298

EPSS

0.00032

KEV

لا

النشاطات

منخفض جدًا

المصادر

Do you need the next level of professionalism?

Upgrade your account now!