CVE-2026-46048 in Linux
Zusammenfassung
von VulDB • 28.05.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
ALSA: caiaq: Behebung des Lecks der usb_dev-Referenzzählung bei einem Fehler während der Initialisierung (Probe)
create_card() nimmt eine Referenz auf das USB-Gerät mit usb_get_dev() auf und speichert den entsprechenden Aufruf von usb_put_dev() in card_free(), der als ->private_free-Zerstörer (Destructor) für snd_card installiert wird.
Allerdings wird ->private_free erst gegen Ende von init_card() zugewiesen, nachdem mehrere Fehlerquellen (usb_set_interface(), EP-Typ-Prüfungen, usb_submit_urb(), der EP1_CMD_GET_DEVICE_INFO-Austausch und dessen Timeout) durchlaufen wurden. Wenn einer dieser Schritte fehlschlägt, gibt init_card() einen Fehler an snd_probe() zurück, das snd_card_free(card) aufruft. Da ->private_free noch NULL ist, wird card_free() nie ausgeführt, die Referenz von usb_get_dev() wird nicht freigegeben, und die struct usb_device zusammen mit ihren Deskriptorzuweisungen und device_private wird nicht freigegeben (Leck).
syzbot reproduziert dies mit einem fehlerhaften UAC3-Gerät, dessen einziger gültiger Altsetting-Wert 0 ist; der Aufruf usb_set_interface(usb_dev, 0, 1) in init_card() schlägt mit -EIO fehl und löst das Leck aus.
Die Zuweisung von ->private_free wird in create_card() verschoben, unmittelbar nach usb_get_dev(), sodass jeder Fehlerpfad, der snd_card_free() erreicht, die Referenz korrekt ausgleicht. Die von card_free() aufgerufenen Funktionen (snd_usb_caiaq_input_free, free_urbs, kfree) tolerieren den teilweise initialisierten Zustand bereits, da der private Bereich des Chips durch snd_card_new() mit Nullen initialisiert wird.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.