CVE-2026-74682
Gravedad:
Pendiente de análisis
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
22/08/2026
Última modificación:
22/08/2026
Descripción
*** Pendiente de traducción *** In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
ALSA: usb-audio: fix OOB write on Type II inbound URBs<br />
<br />
data_ep_set_params() sizes each URB transfer buffer before it adds the<br />
Format Type II transfer delimiter:<br />
<br />
u->packets = urb_packs;<br />
u->buffer_size = maxsize * u->packets;<br />
<br />
if (fmt->fmt_type == UAC_FORMAT_TYPE_II)<br />
u->packets++; /* for transfer delimiter */<br />
u->urb = usb_alloc_urb(u->packets, GFP_KERNEL);<br />
<br />
buffer_size is computed from the pre-increment packet count and never<br />
recomputed, so for a Type II endpoint the buffer is one packet short of<br />
the packet count the URB is built with.<br />
<br />
prepare_inbound_urb() then lays out one iso frame per packet and never<br />
consults buffer_size:<br />
<br />
offs = 0;<br />
for (i = 0; i packets; i++) {<br />
urb->iso_frame_desc[i].offset = offs;<br />
urb->iso_frame_desc[i].length = ep->curpacksize;<br />
offs += ep->curpacksize;<br />
}<br />
<br />
urb->transfer_buffer_length = offs;<br />
urb->number_of_packets = urb_ctx->packets;<br />
<br />
The last descriptor therefore points one packet past the end of the<br />
transfer buffer, where the host controller writes device data on every<br />
inbound transfer. prepare_silent_urb() and prepare_playback_urb() bound<br />
their fill loops by ctx->buffer_size, so only capture is affected.<br />
<br />
fmt_type comes from the device&#39;s audio streaming descriptors, so any<br />
device advertising a Type II capture format hits this once userspace sets<br />
hw_params on the stream.<br />
<br />
KASAN on 7.2.0-rc5 (arm64) with a dummy_hcd/raw-gadget device, one report<br />
per inbound transfer:<br />
<br />
BUG: KASAN: slab-out-of-bounds in dummy_timer<br />
Write of size 64 at addr ffff0000186171c0 by task cons02/166<br />
__asan_memcpy<br />
dummy_timer<br />
hrtimer_run_softirq<br />
Allocated by task 166:<br />
usb_alloc_coherent<br />
snd_usb_endpoint_set_params<br />
The buggy address is located 0 bytes to the right of<br />
allocated 64-byte region [ffff000018617180, ffff0000186171c0)<br />
<br />
Compute buffer_size after the delimiter packet has been accounted for,<br />
and bound the fill loop by buffer_size, as prepare_silent_urb() already<br />
does on the outbound side. This grows every Type II URB allocation by<br />
one maxsize packet.<br />
<br />
Discovered by XBOW, triaged by Baul Lee
Impacto
Referencias a soluciones, herramientas e información
- https://git.kernel.org/stable/c/0a235379825e1a6194e43861ee6658e5fc35686d
- https://git.kernel.org/stable/c/137bf034740e5a2734794908d0aff1e0bd7cee6e
- https://git.kernel.org/stable/c/6607f85242577f33d4540a0d1f4a6137f5367058
- https://git.kernel.org/stable/c/69ee44e1a23be62318189dc4b37fa4ad94053269
- https://git.kernel.org/stable/c/6af5f29af7711233ae68d3b25c15d67478468900
- https://git.kernel.org/stable/c/ca22c94bdfc22c564ca2e11c87ba4d17ebeaaa9a
- https://git.kernel.org/stable/c/d3ed4e6321bb453757044cb9e5ecb30a33f04903
- https://git.kernel.org/stable/c/f1fbb50b99311b35c2e85cc70341d62082dca4b5


