| From 49dc431606ee212fcd8ac1b9bd82538a0340b592 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 25 Feb 2026 09:52:28 +0100 |
| Subject: ALSA: usb-audio: Cap the packet size pre-calculations |
| |
| From: Takashi Iwai <tiwai@suse.de> |
| |
| [ Upstream commit 7fe8dec3f628e9779f1631576f8e693370050348 ] |
| |
| We calculate the possible packet sizes beforehand for adaptive and |
| synchronous endpoints, but we didn't take care of the max frame size |
| for those pre-calculated values. When a device or a bus limits the |
| packet size, a high sample rate or a high number of channels may lead |
| to the packet sizes that are larger than the given limit, which |
| results in an error from the USB core at submitting URBs. |
| |
| As a simple workaround, just add the sanity checks of pre-calculated |
| packet sizes to have the upper boundary of ep->maxframesize. |
| |
| Fixes: f0bd62b64016 ("ALSA: usb-audio: Improve frames size computation") |
| Link: https://bugzilla.kernel.org/show_bug.cgi?id=221076 |
| Signed-off-by: Takashi Iwai <tiwai@suse.de> |
| Link: https://patch.msgid.link/20260225085233.316306-2-tiwai@suse.de |
| Signed-off-by: Takashi Iwai <tiwai@suse.de> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| sound/usb/endpoint.c | 3 +++ |
| 1 file changed, 3 insertions(+) |
| |
| diff --git a/sound/usb/endpoint.c b/sound/usb/endpoint.c |
| index 3ac1fbec6327e..173edce027d7b 100644 |
| --- a/sound/usb/endpoint.c |
| +++ b/sound/usb/endpoint.c |
| @@ -1374,6 +1374,9 @@ int snd_usb_endpoint_set_params(struct snd_usb_audio *chip, |
| return -EINVAL; |
| } |
| |
| + ep->packsize[0] = min(ep->packsize[0], ep->maxframesize); |
| + ep->packsize[1] = min(ep->packsize[1], ep->maxframesize); |
| + |
| /* calculate the frequency in 16.16 format */ |
| ep->freqm = ep->freqn; |
| ep->freqshift = INT_MIN; |
| -- |
| 2.51.0 |
| |