CVE-2026-80971 in Linux信息

摘要

由 VulDB • 2026-09-12

在 Linux 内核中,已修复以下漏洞:

ALSA: bcd2000: 断开连接时清除 URB 指针

`bcd2000_free_usb_related_resources()` 释放了所有 URB(USB Request Block),但留下了指向它们的指针:

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);

rawmidi 设备的生命周期长于该调用。当设备被拔出时,仍处于打开状态的子流会通过触发路径在关闭时进入 `bcd2000_midi_send()`。该函数会写入已释放的 URB,然后将其交给 USB 核心:

bcd2k->midi_out_urb->transfer_buffer_length = BUFSIZE; ... ret = usb_submit_urb(bcd2k->midi_out_urb, GFP_ATOMIC);

`usb_kill_urb()` 也不会阻止后续的提交操作,因此与断开连接竞态的提交可能会在 URB 被回收后重新入队。`midi_in_urb` 以相同方式暴露:`bcd2000_input_complete()` 从完成处理程序中重新提交它。

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

在释放后清除这两个指针,并在仍可能运行的路径上对其进行测试。在释放 URB 之前对其加毒(poison):`usb_poison_urb()` 会等待正在运行的完成处理程序并拒绝任何后续提交,因此在其返回后,输入路径将处于静默状态,只有 rawmidi 触发路径仍能到达 `bcd2000_midi_send()`。无需取消加毒;URB 将在下一行被释放。

由 XBOW 发现,Baul Lee <[email protected]> 进行分类处理

If you want to get best quality of vulnerability data, you may have to visit VulDB.

来源

Do you want to use VulDB in your project?

Use the official API to access entries easily!