CVE-2026-98265
NoneCVSS
—
EPSS
0.2%
Published
Oct 6, 2026
CISA due date
—
Cloudanix analysis
A bug in the Linux kernel's handling of certain USB audio devices could let a plugged-in gadget crash the computer or gain control of it.
- Exploitation
- Local Privilege
- Attacker needs
- Local User
- Complexity
- Moderate
- Impact
- Privilege Gain
- Component
- OS kernel
- Class
- Buffer Overflow
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
The flaw permits a slab-out-of-bounds write in prepare_playback_urb when an implicit-feedback USB audio endpoint supplies a packet count larger than the data URB's allocated iso_frame_desc slots, because the driver records only the original endpoint limit and does not clamp the adopted count or packet-size copy before writing descriptors.
Why it matters to the business
Systems that attach untrusted or specially crafted USB audio devices can experience kernel crashes, memory corruption, or potential local privilege escalation, resulting in denial of service or full host compromise during normal audio streaming.
How an attack unfolds
An attacker presents a high-speed UAC2 device declaring mismatched bInterval values (capture interval 1 yielding 8 packets, playback interval 4 yielding 1 packet); on the first capture URB completion the driver overwrites seven descriptors beyond the single-packet URB allocation, triggering the out-of-bounds write inside the URB completion path.
How to fix it
Apply the upstream ALSA fix that records the allocated packet count per endpoint and clamps both the adopted packet count and packet-size copy to that limit before any URB descriptor writes; rebuild and deploy the patched kernel on all affected systems.
How to confirm the fix worked
Confirm the patch is present by inspecting sound/usb/pcm.c and sound/usb/endpoint.c for the new clamping logic around urb_packs and ctx->packets; test with a device declaring bInterval 1 capture and bInterval 4 playback to verify no out-of-bounds access occurs.
Typical attack path
- Attach malicious high-speed UAC2 USB audio device to a vulnerable Linux host
- Start an audio playback stream that activates implicit feedback
- First capture completion invokes snd_complete_urb and snd_usb_queue_pending_output_urbs
- prepare_playback_urb writes past the end of the allocated iso_frame_desc array
- Kernel memory corruption or KASAN report occurs
How to detect it
Search kernel logs and KASAN reports for slab-out-of-bounds writes originating from prepare_playback_urb or prepare_silent_urb in the sound/usb directory, especially following USB audio stream start events.
What your security team should do
- Prioritize kernel updates containing the ALSA usb-audio clamp fix on all endpoints that support USB audio
- Restrict physical or virtual USB device attachment to trusted hardware only
- Enable kernel hardening features such as KASAN or lockdown mode in test environments to surface similar issues early
- Review logs for USB audio URB completion paths after any new device attachment
The record
In the Linux kernel, the following vulnerability has been resolved: ALSA: usb-audio: Clamp implicit feedback packet count to URB capacity data_ep_set_params() allocates each data URB for exactly u->packets isochronous frames, so urb->iso_frame_desc[] has u->packets slots and ctx->packets is the driver's only record of that limit. For an implicit feedback sink, snd_usb_queue_pending_output_urbs() overwrites it with the sync source's packet count, which is calculated independently from the capture endpoint's parameters. When that count is larger, prepare_playback_urb() and prepare_silent_urb() can write iso_frame_desc[] past the allocation; their existing bounds limit payload bytes, not the descriptor index. The reproducer uses a high-speed UAC2 device declaring bInterval 1 for implicit feedback capture (8 packets) and bInterval 4 for playback (1 packet). On the first capture completion after the stream starts, it accesses seven descriptors spanning 112 bytes beyond the one-packet URB: BUG: KASAN: slab-out-of-bounds in prepare_playback_urb (sound/usb/pcm.c:1560) Write of size 4 at addr ffff88801e696ad0 by task vhci_rx/178 prepare_playback_urb (sound/usb/pcm.c:1560) prepare_outbound_urb (sound/usb/endpoint.c:340) snd_usb_queue_pending_output_urbs (sound/usb/endpoint.c:501) snd_complete_urb (sound/usb/endpoint.c:1834) __usb_hcd_giveback_urb (drivers/usb/core/hcd.c:1657) usb_hcd_giveback_urb (drivers/usb/core/hcd.c:1741) vhci_rx_loop (drivers/usb/usbip/vhci_rx.c:107) kthread (kernel/kthread.c:436) The buggy address belongs to the object at ffff88801e696a00 which belongs to the cache kmalloc-256 of size 256 The buggy address is located 0 bytes to the right of allocated 208-byte region [ffff88801e696a00, ffff88801e696ad0) Record the allocated packet count per endpoint and clamp both the adopted count and the packet-size copy to it. Fold the Format Type II delimiter into urb_packs before the allocation loop so the recorded limit matches every URB.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|