aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sound/usb/mixer.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c
index 1beb5b4d027e..b8ce651e392c 100644
--- a/sound/usb/mixer.c
+++ b/sound/usb/mixer.c
@@ -1469,6 +1469,12 @@ static int parse_audio_feature_unit(struct mixer_build *state, int unitid,
1469 __u8 *bmaControls; 1469 __u8 *bmaControls;
1470 1470
1471 if (state->mixer->protocol == UAC_VERSION_1) { 1471 if (state->mixer->protocol == UAC_VERSION_1) {
1472 if (hdr->bLength < 7) {
1473 usb_audio_err(state->chip,
1474 "unit %u: invalid UAC_FEATURE_UNIT descriptor\n",
1475 unitid);
1476 return -EINVAL;
1477 }
1472 csize = hdr->bControlSize; 1478 csize = hdr->bControlSize;
1473 if (!csize) { 1479 if (!csize) {
1474 usb_audio_dbg(state->chip, 1480 usb_audio_dbg(state->chip,
@@ -1486,6 +1492,12 @@ static int parse_audio_feature_unit(struct mixer_build *state, int unitid,
1486 } 1492 }
1487 } else { 1493 } else {
1488 struct uac2_feature_unit_descriptor *ftr = _ftr; 1494 struct uac2_feature_unit_descriptor *ftr = _ftr;
1495 if (hdr->bLength < 6) {
1496 usb_audio_err(state->chip,
1497 "unit %u: invalid UAC_FEATURE_UNIT descriptor\n",
1498 unitid);
1499 return -EINVAL;
1500 }
1489 csize = 4; 1501 csize = 4;
1490 channels = (hdr->bLength - 6) / 4 - 1; 1502 channels = (hdr->bLength - 6) / 4 - 1;
1491 bmaControls = ftr->bmaControls; 1503 bmaControls = ftr->bmaControls;