PT-2026-90103 · Linux · Linux

CVE-2026-80973

·

Published

2026-09-11

·

Updated

2026-09-11

None

No severity ratings or metrics are available. When they are, we'll update the corresponding info on the page.
In the Linux kernel, the following vulnerability has been resolved:
ALSA: 6fire: bound the MIDI event length from the device
usb6fire comm receiver handler() forwards a MIDI event using a length byte the device supplies, with no bound and no check that the transfer delivered that many bytes:
if (!urb->status) {
	if (rt->receiver buffer[0] == 0x10) /* midi in event */
		if (midi rt)
			midi rt->in received(midi rt,
					rt->receiver buffer + 2,
					rt->receiver buffer[1]);
}
receiver buffer is a 64-byte kzalloc() buffer (COMM RECEIVER BUFSIZE), so only 62 bytes follow the two-byte header. receiver buffer[1] is a u8 the device chooses, so a device that answers with 0x10 and a length of 0xFF makes snd rawmidi receive() read 255 bytes starting two bytes into a 64-byte object. The bytes past the buffer are handed to userspace through the rawmidi read path.
urb->actual length is not consulted either, so a short transfer leaves both the type byte and the length byte at their previous values and the handler acts on stale data.
The receiver URB is submitted from usb6fire comm init() at probe, so the read happens on plug with no user action; forwarding to userspace also needs a MIDI input substream open, since usb6fire midi in received() only calls snd rawmidi receive() when rt->in is set.
KASAN on 7.2.0-rc5 (arm64), single packet from an emulated device:
BUG: KASAN: slab-out-of-bounds in snd rawmidi receive Read of size 255 at addr ffff000009f64682 by task bash/183 asan memcpy snd rawmidi receive usb6fire midi in received [snd usb 6fire] usb6fire comm receiver handler [snd usb 6fire] Allocated by task 11: usb6fire comm init [snd usb 6fire] usb6fire chip probe [snd usb 6fire] The buggy address is located 2 bytes inside of allocated 64-byte region [ffff000009f64680, ffff000009f646c0)
Reject the event when the length exceeds the bytes that follow the header, and require the transfer to have delivered the header plus that many bytes. The receiver URB is submitted with a 64-byte transfer buffer length, so a genuine device cannot deliver an event longer than those 62 bytes and nothing valid is dropped.
Discovered by XBOW, triaged by Baul Lee baul.lee@xbow.com
Found an issue in the description? Have something to add? Feel free to write us 👾

Related Identifiers

CVE-2026-80973

Affected Products

Linux