CVE-2026-74639 in Linux
Zusammenfassung
von VulDB • 22.08.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
ALSA: us144mkii – URBs für die Aufnahme (Capture) bei erneuter Übermittlung wieder verankern
capture_urb_complete() übermittelt jedes Capture-URB erneut, ohne es zu verankern:
usb_get_urb(urb); ret = usb_submit_urb(urb, GFP_ATOMIC);
Das Verankern ist eine Eigenschaft der Übermittlung und nicht des URB. Der Giveback-Pfad ruft vor urb->complete() usb_unanchor_urb() auf, sodass ein aus seinem eigenen Completion-Handler heraus erneut übermitteltes URB nicht mehr verankert ist. Die Capture-URBs werden einmalig beim Start des Streams verankert; ab dem ersten Durchlauf von complete ist tascam->capture_anchor daher leer.
tascam_free_urbs(), tascam_disconnect(), tascam_suspend() und der Stop-Arbeitspfad rufen alle usb_kill_anchored_urbs(&tascam->capture_anchor) auf, um die Capture-URBs zu bereinigen, bevor etwas freigegeben wird. Da das Anchor leer ist, kehren diese Aufrufe sofort zurück, und die URBs verbleiben in der Warteschlange des Host-Controllers.
Anschließend gibt tascam_free_urbs() die Transferpuffer für die Aufnahme mit usb_free_coherent() frei, und snd_card_free() löst die snd_card-Allokation auf, die tascam enthält (card->private_data). Der Controller vervollständigt daraufhin die in der Warteschlange befindlichen URBs und schreibt geräteseitige Daten in den freigegebenen Transferpuffer. capture_urb_complete() dereferenziert anschließend das freigegebene Treiberobjekt.
KASAN auf 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
Stellen Sie usb_anchor_urb() zwischen dem Erhöhen der Referenzzahl und der erneuten Übermittlung wieder her. Dies macht auch den Fehlerschaltkreis von usb_unanchor_urb() im Handler wieder sinnvoll und stellt usb_kill_anchored_urbs() als Barriere in den Disconnect-, Suspend- und Stop-Arbeitspfaden wieder her.
Das Verankern wurde unter der Annahme entfernt, dass das URB bereits aus der ursprünglichen Übermittlung verankert sei; dies trifft jedoch nicht mehr zu, sobald die erste Giveback-Routine ausgeführt wurde.
Entdeckt von XBOW, triagiert von Baul Lee <[email protected]>
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.