[PATCH] ALSA: usb-audio: Prevent excessive number of frames

Edward Adam Davis posted 1 patch 3 weeks, 5 days ago
sound/usb/pcm.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
[PATCH] ALSA: usb-audio: Prevent excessive number of frames
Posted by Edward Adam Davis 3 weeks, 5 days ago
In this case, the user constructed the parameters with maxpacksize 40
for rate 22050 / pps 1000, and packsize[0] 22 packsize[1] 23. The buffer
size for each data URB is maxpacksize * packets, which in this example
is 40 * 6 = 240; When the user performs a write operation to send audio
data into the ALSA PCM playback stream, the calculated number of frames
is packsize[0] * packets = 264, which exceeds the allocated URB buffer
size, triggering the out-of-bounds (OOB) issue reported by syzbot [1].

Added a check for the number of single data URB frames when calculating
the number of frames to prevent [1].

[1]
BUG: KASAN: slab-out-of-bounds in copy_to_urb+0x261/0x460 sound/usb/pcm.c:1487
Write of size 264 at addr ffff88804337e800 by task syz.0.17/5506
Call Trace:
 copy_to_urb+0x261/0x460 sound/usb/pcm.c:1487
 prepare_playback_urb+0x953/0x13d0 sound/usb/pcm.c:1611
 prepare_outbound_urb+0x377/0xc50 sound/usb/endpoint.c:333

Reported-by: syzbot+6db0415d6d5c635f72cb@syzkaller.appspotmail.com
Closes: https://syzkaller.appspot.com/bug?extid=6db0415d6d5c635f72cb
Tested-by: syzbot+6db0415d6d5c635f72cb@syzkaller.appspotmail.com
Signed-off-by: Edward Adam Davis <eadavis@qq.com>
---
 sound/usb/pcm.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c
index 54d01dfd820f..263abb36bb2d 100644
--- a/sound/usb/pcm.c
+++ b/sound/usb/pcm.c
@@ -1553,7 +1553,7 @@ static int prepare_playback_urb(struct snd_usb_substream *subs,
 
 		for (i = 0; i < ctx->packets; i++) {
 			counts = snd_usb_endpoint_next_packet_size(ep, ctx, i, avail);
-			if (counts < 0)
+			if (counts < 0 || frames + counts >= ep->max_urb_frames)
 				break;
 			/* set up descriptor */
 			urb->iso_frame_desc[i].offset = frames * stride;
-- 
2.43.0
Re: [PATCH] ALSA: usb-audio: Prevent excessive number of frames
Posted by Takashi Iwai 3 weeks, 5 days ago
On Tue, 13 Jan 2026 09:29:23 +0100,
Edward Adam Davis wrote:
> 
> In this case, the user constructed the parameters with maxpacksize 40
> for rate 22050 / pps 1000, and packsize[0] 22 packsize[1] 23. The buffer
> size for each data URB is maxpacksize * packets, which in this example
> is 40 * 6 = 240; When the user performs a write operation to send audio
> data into the ALSA PCM playback stream, the calculated number of frames
> is packsize[0] * packets = 264, which exceeds the allocated URB buffer
> size, triggering the out-of-bounds (OOB) issue reported by syzbot [1].
> 
> Added a check for the number of single data URB frames when calculating
> the number of frames to prevent [1].
> 
> [1]
> BUG: KASAN: slab-out-of-bounds in copy_to_urb+0x261/0x460 sound/usb/pcm.c:1487
> Write of size 264 at addr ffff88804337e800 by task syz.0.17/5506
> Call Trace:
>  copy_to_urb+0x261/0x460 sound/usb/pcm.c:1487
>  prepare_playback_urb+0x953/0x13d0 sound/usb/pcm.c:1611
>  prepare_outbound_urb+0x377/0xc50 sound/usb/endpoint.c:333
> 
> Reported-by: syzbot+6db0415d6d5c635f72cb@syzkaller.appspotmail.com
> Closes: https://syzkaller.appspot.com/bug?extid=6db0415d6d5c635f72cb
> Tested-by: syzbot+6db0415d6d5c635f72cb@syzkaller.appspotmail.com
> Signed-off-by: Edward Adam Davis <eadavis@qq.com>

Applied now.  Thanks.


Takashi