KernelScan.io

HIGH Introduced in 3.16

bcd2000 UrbPointer UAF

CVE-2026-80971

CVSS 7.8 / 10.0 NVD

CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

KernelScan AI6.8MEDIUM

01

In the Linux kernel, the following vulnerability has been resolved: ALSA: bcd2000: clear the URB pointers on disconnect bcd2000_free_usb_related_resources() frees both URBs and leaves the pointers behind: usb_kill_urb(bcd2k->midi_out_urb); usb_kill_urb(bcd2k->midi_in_urb); usb_free_urb(bcd2k->midi_out_urb); usb_free_urb(bcd2k->midi_in_urb); The rawmidi device outlives that call. A substream that is still open when the device is unplugged reaches bcd2000_midi_send() from the trigger path on close. That function writes to the freed URB and then hands it to the USB core: bcd2k->midi_out_urb->transfer_buffer_length = BUFSIZE; ... ret = usb_submit_urb(bcd2k->midi_out_urb, GFP_ATOMIC); usb_kill_urb() does not stop a later submission either, so a submit that races the disconnect can requeue the URB after it has been reaped. midi_in_urb is exposed the same way: bcd2000_input_complete() resubmits it from the completion handler. KASAN on 7.2.0-rc5 (arm64): BUG: KASAN: slab-use-after-free in bcd2000_midi_send [snd_bcd2000] Write of size 4 at addr ffff00001827d388 by task bpoc/168 __asan_store4 bcd2000_midi_send [snd_bcd2000] bcd2000_midi_output_trigger [snd_bcd2000] snd_rawmidi_kernel_write1 close_substream.part.0 Freed by task 168: usb_free_urb bcd2000_disconnect [snd_bcd2000] BUG: KASAN: slab-use-after-free in usb_submit_urb Read of size 8 at addr ffff00001827d3b8 by task bpoc/168 Clear both pointers after freeing and test them on the paths that can still run. Poison the URBs before freeing them: usb_poison_urb() waits for a running completion handler and rejects any later submission, so after it returns the input path is quiesced and only the rawmidi trigger path can still reach bcd2000_midi_send(). No unpoison is needed; the URBs are freed on the next line. Discovered by XBOW, triaged by Baul Lee <baul.lee@xbow.com>

02

Engine v0.6.0

Risk summary

A local user who has the BCD2000 USB MIDI device open can trigger a use-after-free when the device is physically unplugged. The freed URB objects are still accessed on the substream close path, leading to kernel heap corruption that could be exploited for arbitrary read/write or a system crash. Any system with this specific USB audio device connected and accessible is at risk.

Affectedsound/usb/bcd2000/bcd0.c (ALSA BCD2000 USB MIDI driver)

Vulnerability analysis

When the BCD2000 USB MIDI device is disconnected, the driver frees its URB objects but leaves the pointers dangling. The rawmidi substream outlives the disconnect cleanup, so closing a substream that was open at disconnect time reaches the send function, which writes to the freed URB and submits it to the USB core. The input completion handler is similarly exposed because it resubmits the freed input URB. The fix poisons both URBs before freeing them—preventing any future submission and waiting for in-flight completion handlers—then sets the pointers to NULL and adds NULL checks on the paths that can still run after disconnect. Any local user who can open the MIDI device can reach the vulnerable close path, but triggering the UAF requires the USB device to be disconnected, which typically means physical access to unplug it.

03

BranchIntroducedFixed inPatch commit
5.103.165.10.2709af08677aa57
5.153.165.15.2215a77febac6fa
6.13.166.1.1883c00004f134f
6.123.166.12.109eb482a06791d
6.183.166.18.507df3194bdb74
6.63.166.6.1576c07aad8a7c9
7.23.167.2.4b06ebc7fe25a
mainline3.167.3459d3a64766f
cip/5.103.165.10.271-cip789af08677aa57
cip/6.13.166.1.189-cip613c00004f134f
cip/6.1-rt3.166.1.189-cip61-rt323c00004f134f
cip/6.123.166.12.111-cip32eb482a06791d

04

State of the newest release of each Civil Infrastructure Platform SLTS tree, from CIP's own fix records.

CIP treeState
cip/6.12Fixed in 6.12.111-cip32
cip/6.1Fixed in 6.1.189-cip61
cip/6.1-rtFixed in 6.1.189-cip61-rt32
cip/5.10Fixed in 5.10.271-cip78
cip/5.10-rtAffected — no CIP fix yet (latest 5.10.268-cip77-rt34)
cip/4.19Affected — no CIP fix yet (latest 4.19.325-cip136)
cip/4.19-rtAffected — no CIP fix yet (latest 4.19.325-cip136-rt50)
cip/4.4Affected — no CIP fix yet (latest 4.4.302-cip115)
cip/4.4-rtAffected — no CIP fix yet (latest 4.4.302-cip115-rt63)