summaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2019-11-14 17:56:12 +0100
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2019-11-20 18:45:13 +0100
commitf2465526866aa4fc57ccaa64f988d094be4af78e (patch)
tree8f059e812acefab2c15f74e55694f2ce35c1e488 /sound
parent420433f6cf5c6505433a6324584bebb219599806 (diff)
downloadlinux-stable-f2465526866aa4fc57ccaa64f988d094be4af78e.tar.gz
linux-stable-f2465526866aa4fc57ccaa64f988d094be4af78e.tar.bz2
linux-stable-f2465526866aa4fc57ccaa64f988d094be4af78e.zip
ALSA: usb-audio: Fix incorrect size check for processing/extension units
commit 976a68f06b2ea49e2ab67a5f84919a8b105db8be upstream. The recently introduced unit descriptor validation had some bug for processing and extension units, it counts a bControlSize byte twice so it expected a bigger size than it should have been. This seems resulting in a probe error on a few devices. Fix the calculation for proper checks of PU and EU. Fixes: 57f8770620e9 ("ALSA: usb-audio: More validations of descriptor units") Cc: <stable@vger.kernel.org> Link: https://lore.kernel.org/r/20191114165613.7422-1-tiwai@suse.de Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'sound')
-rw-r--r--sound/usb/validate.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/sound/usb/validate.c b/sound/usb/validate.c
index a5e584b60dcd..389e8657434a 100644
--- a/sound/usb/validate.c
+++ b/sound/usb/validate.c
@@ -81,9 +81,9 @@ static bool validate_processing_unit(const void *p,
switch (v->protocol) {
case UAC_VERSION_1:
default:
- /* bNrChannels, wChannelConfig, iChannelNames, bControlSize */
- len += 1 + 2 + 1 + 1;
- if (d->bLength < len) /* bControlSize */
+ /* bNrChannels, wChannelConfig, iChannelNames */
+ len += 1 + 2 + 1;
+ if (d->bLength < len + 1) /* bControlSize */
return false;
m = hdr[len];
len += 1 + m + 1; /* bControlSize, bmControls, iProcessing */