|
|
@@ -2314,7 +2314,7 @@ static int build_audio_procunit(struct mixer_build *state, int unitid,
|
|
|
char *name)
|
|
|
{
|
|
|
struct uac_processing_unit_descriptor *desc = raw_desc;
|
|
|
- int num_ins = desc->bNrInPins;
|
|
|
+ int num_ins;
|
|
|
struct usb_mixer_elem_info *cval;
|
|
|
struct snd_kcontrol *kctl;
|
|
|
int i, err, nameid, type, len;
|
|
|
@@ -2329,7 +2329,13 @@ static int build_audio_procunit(struct mixer_build *state, int unitid,
|
|
|
0, NULL, default_value_info
|
|
|
};
|
|
|
|
|
|
- if (desc->bLength < 13 || desc->bLength < 13 + num_ins ||
|
|
|
+ if (desc->bLength < 13) {
|
|
|
+ usb_audio_err(state->chip, "invalid %s descriptor (id %d)\n", name, unitid);
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
+
|
|
|
+ num_ins = desc->bNrInPins;
|
|
|
+ if (desc->bLength < 13 + num_ins ||
|
|
|
desc->bLength < num_ins + uac_processing_unit_bControlSize(desc, state->mixer->protocol)) {
|
|
|
usb_audio_err(state->chip, "invalid %s descriptor (id %d)\n", name, unitid);
|
|
|
return -EINVAL;
|