summaryrefslogtreecommitdiffstats
path: root/sound/usb/mixer.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2013-01-30 22:20:48 +1100
committerLinus Torvalds <torvalds@linux-foundation.org>2013-01-30 22:20:48 +1100
commit58ff603becda8e414a0643f5b7a384ada74d51f3 (patch)
tree721fa9ce8e52dd834eb9ca23c760a2d8c54f34f3 /sound/usb/mixer.c
parent2e51b231a8d716ea5aacde0bd95ac789cea195b0 (diff)
parent9ddf1aeb2134e72275c97a2c6ff2e3eb04f2f27a (diff)
Merge tag 'sound-3.8' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
Pull sound fixes from Takashi Iwai: - A collection of small ASoC driver fixes (error path fixes, register correction, regulator bypass mode fix, etc) - A few regression fixes and quirks of HD-audio (wrong page attributes for SG-buffer, Poulsbo/Oaktrail controller fix, digital mic fix for Acer, etc) - A fix for USB-audio UAC2 devices wrt FU length check * tag 'sound-3.8' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: ALSA: hda - Fix non-snoop page handling ALSA: hda - Enable LPIB delay count for Poulsbo / Oaktrail ALSA: hda - fix inverted internal mic on Acer AOA150/ZG5 ALSA: usb-audio: fix invalid length check for RME and other UAC 2 devices ALSA: hda - Add a fixup for Packard-Bell desktop with ALC880 ASoC: wm_adsp: Release firmware on error ASoC: wm_adsp: Use GFP_DMA for things that may be DMAed ASoC: arizona: Use actual rather than desired BCLK when calculating LRCLK ASoC: wm2200: correct mixer values and text ASoC: MAINTAINERS: Update email address. ASoC: wm5110: Correct AEC loopback mask ASoC: wm5102: Correct AEC loopback mask ASoC: dapm: Fix sense of regulator bypass mode ASoC: fsl: fix multiple definition of init_module ASoC: arizona: Disable free-running mode on FLL1
Diffstat (limited to 'sound/usb/mixer.c')
-rw-r--r--sound/usb/mixer.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c
index ed4d89c8b52..e90daf8cdaa 100644
--- a/sound/usb/mixer.c
+++ b/sound/usb/mixer.c
@@ -1331,16 +1331,23 @@ static int parse_audio_feature_unit(struct mixer_build *state, int unitid, void
}
channels = (hdr->bLength - 7) / csize - 1;
bmaControls = hdr->bmaControls;
+ if (hdr->bLength < 7 + csize) {
+ snd_printk(KERN_ERR "usbaudio: unit %u: "
+ "invalid UAC_FEATURE_UNIT descriptor\n",
+ unitid);
+ return -EINVAL;
+ }
} else {
struct uac2_feature_unit_descriptor *ftr = _ftr;
csize = 4;
channels = (hdr->bLength - 6) / 4 - 1;
bmaControls = ftr->bmaControls;
- }
-
- if (hdr->bLength < 7 || !csize || hdr->bLength < 7 + csize) {
- snd_printk(KERN_ERR "usbaudio: unit %u: invalid UAC_FEATURE_UNIT descriptor\n", unitid);
- return -EINVAL;
+ if (hdr->bLength < 6 + csize) {
+ snd_printk(KERN_ERR "usbaudio: unit %u: "
+ "invalid UAC_FEATURE_UNIT descriptor\n",
+ unitid);
+ return -EINVAL;
+ }
}
/* parse the source unit */