{"id":21304,"date":"2026-09-12T04:31:00","date_gmt":"2026-09-11T20:31:00","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-80971"},"modified":"2026-09-12T04:31:00","modified_gmt":"2026-09-11T20:31:00","slug":"cve-2026-80971","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-80971","title":{"rendered":"CVE-2026-80971 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nALSA: bcd2000: clear"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>ALSA: bcd2000: clear the URB pointers on disconnect<\/p>\n<p>bcd2000_free_usb_related_resources() frees both URBs and leaves the<br \/>\npointers behind:<\/p>\n<p>\tusb_kill_urb(bcd2k-&gt;midi_out_urb);<br \/>\n\tusb_kill_urb(bcd2k-&gt;midi_in_urb);<\/p>\n<p>\tusb_free_urb(bcd2k-&gt;midi_out_urb);<br \/>\n\tusb_free_urb(bcd2k-&gt;midi_in_urb);<\/p>\n<p>The rawmidi device outlives that call.  A substream that is still open<br \/>\nwhen the device is unplugged reaches bcd2000_midi_send() from the<br \/>\ntrigger path on close.  That function writes to the freed URB and then<br \/>\nhands it to the USB core:<\/p>\n<p>\tbcd2k-&gt;midi_out_urb-&gt;transfer_buffer_length = BUFSIZE;<br \/>\n\t&#8230;<br \/>\n\tret = usb_submit_urb(bcd2k-&gt;midi_out_urb, GFP_ATOMIC);<\/p>\n<p>usb_kill_urb() does not stop a later submission either, so a submit that<br \/>\nraces the disconnect can requeue the URB after it has been reaped.<br \/>\nmidi_in_urb is exposed the same way: bcd2000_input_complete() resubmits<br \/>\nit from the completion handler.<\/p>\n<p>KASAN on 7.2.0-rc5 (arm64):<\/p>\n<p>  BUG: KASAN: slab-use-after-free in bcd2000_midi_send [snd_bcd2000]<br \/>\n  Write of size 4 at addr ffff00001827d388 by task bpoc\/168<br \/>\n   __asan_store4<br \/>\n   bcd2000_midi_send [snd_bcd2000]<br \/>\n   bcd2000_midi_output_trigger [snd_bcd2000]<br \/>\n   snd_rawmidi_kernel_write1<br \/>\n   close_substream.part.0<br \/>\n  Freed by task 168:<br \/>\n   usb_free_urb<br \/>\n   bcd2000_disconnect [snd_bcd2000]<\/p>\n<p>  BUG: KASAN: slab-use-after-free in usb_submit_urb<br \/>\n  Read of size 8 at addr ffff00001827d3b8 by task bpoc\/168<\/p>\n<p>Clear both pointers after freeing and test them on the paths that can<br \/>\nstill run.  Poison the URBs before freeing them: usb_poison_urb() waits<br \/>\nfor a running completion handler and rejects any later submission, so<br \/>\nafter it returns the input path is quiesced and only the rawmidi trigger<br \/>\npath can still reach bcd2000_midi_send().  No unpoison is needed; the<br \/>\nURBs are freed on the next line.<\/p>\n<p>Discovered by XBOW, triaged by Baul Lee <\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>ALSA: bcd2000: clear the URB pointers on disconnect<\/p>\n<p>bcd2000_free_usb_related_resources() frees both URBs and leaves the<br \/>\npointers b<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-21304","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/21304","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=21304"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=21304"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=21304"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}