summaryrefslogtreecommitdiff
path: root/scripts/git.orderFile
diff options
context:
space:
mode:
authorSinan Turunc <enscrpt@pm.me>2026-10-26 22:36:47 +0000
committerTakashi Iwai <tiwai@suse.de>2026-10-27 07:37:01 +0100
commit493a77a9f20fca07ca5654f61c1b03bef035df25 (patch)
treedf0e78bf750efdd6d933ef93fa463acda4a16baf /scripts/git.orderFile
parent06be918062adc1a5a76dc346803b136b20bdb5ae (diff)
downloadlinux-493a77a9f20fca07ca5654f61c1b03bef035df25.tar.gz
linux-493a77a9f20fca07ca5654f61c1b03bef035df25.zip
ALSA: ua101: Bound packet copies by the PCM buffer size
copy_capture_data() and copy_playback_data() wrap the ring buffer position once and split the memcpy() in two at the buffer end, which is only correct when one packet holds at most buffer_size frames. The capture packet size is the device's (actual_length up to wMaxPacketSize, divided by 3 * bNrChannels from its own descriptor), the playback packet size is taken from the capture packets, and set_stream_hw() lets the PCM client pick period_bytes_min 1, periods_min 2 and a period time of 1.5 packet intervals: 9 frames at 44.1 kHz high speed, an 18-frame buffer. A device sending 672-byte mono 24-bit packets delivers 224 frames per packet. After the first packet buffer_pos is 206 and stays beyond buffer_size. On the next packet frames1 = buffer_size - buffer_pos wraps and memcpy() runs away: snd-ua101 2-1:1.0: invalid position: , pos = 206, buffer size = 18, period size = 9 BUG: KASAN: slab-out-of-bounds in capture_urb_complete+0x9eb/0xcb0 Read of size 4294966732 at addr ffff88800d73e7e0 by task vhci_rx/81 and for playback: BUG: KASAN: vmalloc-out-of-bounds in playback_work+0x789/0xac0 Read of size 4294966732 at addr ffffc9000002626a by task kworker/0:1H/80 Clamp the capture copy to buffer_size. On playback, copy at most one buffer and fill the rest of the packet with silence, so the URB length, the delay accounting and the data sent stay consistent. With that bound the single wrap and both memcpy() halves stay inside the buffer. A device whose packets do not fit the buffer never played correctly anyway. Reproduced on 7.3-rc7 with a USB/IP device presenting the UA-101 interface layout and a 672-byte isochronous endpoint. Fixes: 63978ab3e3e9 ("sound: add Edirol UA-101 support") Cc: stable@vger.kernel.org Signed-off-by: Sinan Turunc <enscrpt@pm.me> Signed-off-by: Takashi Iwai <tiwai@suse.de> Link: https://patch.msgid.link/20261026223543.620-3-enscrpt@pm.me
Diffstat (limited to 'scripts/git.orderFile')
0 files changed, 0 insertions, 0 deletions