static bool validate_clock_source_v2(void *p, int id)
 {
        struct uac_clock_source_descriptor *cs = p;
-       return cs->bLength == sizeof(*cs) && cs->bClockID == id;
+       return cs->bClockID == id;
 }
 
 static bool validate_clock_source_v3(void *p, int id)
 {
        struct uac3_clock_source_descriptor *cs = p;
-       return cs->bLength == sizeof(*cs) && cs->bClockID == id;
+       return cs->bClockID == id;
 }
 
 static bool validate_clock_selector_v2(void *p, int id)
 {
        struct uac_clock_selector_descriptor *cs = p;
-       return cs->bLength >= sizeof(*cs) && cs->bClockID == id &&
-               cs->bLength == 7 + cs->bNrInPins;
+       return cs->bClockID == id;
 }
 
 static bool validate_clock_selector_v3(void *p, int id)
 {
        struct uac3_clock_selector_descriptor *cs = p;
-       return cs->bLength >= sizeof(*cs) && cs->bClockID == id &&
-               cs->bLength == 11 + cs->bNrInPins;
+       return cs->bClockID == id;
 }
 
 static bool validate_clock_multiplier_v2(void *p, int id)
 {
        struct uac_clock_multiplier_descriptor *cs = p;
-       return cs->bLength == sizeof(*cs) && cs->bClockID == id;
+       return cs->bClockID == id;
 }
 
 static bool validate_clock_multiplier_v3(void *p, int id)
 {
        struct uac3_clock_multiplier_descriptor *cs = p;
-       return cs->bLength == sizeof(*cs) && cs->bClockID == id;
+       return cs->bClockID == id;
 }
 
 #define DEFINE_FIND_HELPER(name, obj, validator, type)         \
 
 {
        int mu_channels;
 
-       if (desc->bLength < sizeof(*desc))
-               return -EINVAL;
-       if (!desc->bNrInPins)
-               return -EINVAL;
-       if (desc->bLength < sizeof(*desc) + desc->bNrInPins)
-               return -EINVAL;
-
        switch (state->mixer->protocol) {
        case UAC_VERSION_1:
        case UAC_VERSION_2:
        if (state->mixer->protocol != UAC_VERSION_2)
                return -EINVAL;
 
-       if (hdr->bLength != sizeof(*hdr)) {
-               usb_audio_dbg(state->chip,
-                             "Bogus clock source descriptor length of %d, ignoring.\n",
-                             hdr->bLength);
-               return 0;
-       }
-
        /*
         * The only property of this unit we are interested in is the
         * clock source validity. If that isn't readable, just bail out.
        __u8 *bmaControls;
 
        if (state->mixer->protocol == UAC_VERSION_1) {
-               if (hdr->bLength < 7) {
-                       usb_audio_err(state->chip,
-                                     "unit %u: invalid UAC_FEATURE_UNIT descriptor\n",
-                                     unitid);
-                       return -EINVAL;
-               }
                csize = hdr->bControlSize;
-               if (!csize) {
-                       usb_audio_dbg(state->chip,
-                                     "unit %u: invalid bControlSize == 0\n",
-                                     unitid);
-                       return -EINVAL;
-               }
                channels = (hdr->bLength - 7) / csize - 1;
                bmaControls = hdr->bmaControls;
-               if (hdr->bLength < 7 + csize) {
-                       usb_audio_err(state->chip,
-                                     "unit %u: invalid UAC_FEATURE_UNIT descriptor\n",
-                                     unitid);
-                       return -EINVAL;
-               }
        } else if (state->mixer->protocol == UAC_VERSION_2) {
                struct uac2_feature_unit_descriptor *ftr = _ftr;
-               if (hdr->bLength < 6) {
-                       usb_audio_err(state->chip,
-                                     "unit %u: invalid UAC_FEATURE_UNIT descriptor\n",
-                                     unitid);
-                       return -EINVAL;
-               }
                csize = 4;
                channels = (hdr->bLength - 6) / 4 - 1;
                bmaControls = ftr->bmaControls;
-               if (hdr->bLength < 6 + csize) {
-                       usb_audio_err(state->chip,
-                                     "unit %u: invalid UAC_FEATURE_UNIT descriptor\n",
-                                     unitid);
-                       return -EINVAL;
-               }
        } else { /* UAC_VERSION_3 */
                struct uac3_feature_unit_descriptor *ftr = _ftr;
 
-               if (hdr->bLength < 7) {
-                       usb_audio_err(state->chip,
-                                     "unit %u: invalid UAC3_FEATURE_UNIT descriptor\n",
-                                     unitid);
-                       return -EINVAL;
-               }
                csize = 4;
                channels = (ftr->bLength - 7) / 4 - 1;
                bmaControls = ftr->bmaControls;
-               if (hdr->bLength < 7 + csize) {
-                       usb_audio_err(state->chip,
-                                     "unit %u: invalid UAC3_FEATURE_UNIT descriptor\n",
-                                     unitid);
-                       return -EINVAL;
-               }
        }
 
        /* parse the source unit */
 
        if (state->mixer->protocol == UAC_VERSION_2) {
                struct uac2_input_terminal_descriptor *d_v2 = raw_desc;
-               if (d_v2->bLength < sizeof(*d_v2))
-                       return -EINVAL;
                control = UAC2_TE_CONNECTOR;
                term_id = d_v2->bTerminalID;
                bmctls = le16_to_cpu(d_v2->bmControls);
        } else if (state->mixer->protocol == UAC_VERSION_3) {
                struct uac3_input_terminal_descriptor *d_v3 = raw_desc;
-               if (d_v3->bLength < sizeof(*d_v3))
-                       return -EINVAL;
                control = UAC3_TE_INSERTION;
                term_id = d_v3->bTerminalID;
                bmctls = le32_to_cpu(d_v3->bmControls);
        const char *name = extension_unit ?
                "Extension Unit" : "Processing Unit";
 
-       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;
-       }
-
        for (i = 0; i < num_ins; i++) {
                err = parse_audio_unit(state, desc->baSourceID[i]);
                if (err < 0)
        const struct usbmix_name_map *map;
        char **namelist;
 
-       if (desc->bLength < 5 || !desc->bNrInPins ||
-           desc->bLength < 5 + desc->bNrInPins) {
-               usb_audio_err(state->chip,
-                       "invalid SELECTOR UNIT descriptor %d\n", unitid);
-               return -EINVAL;
-       }
-
        for (i = 0; i < desc->bNrInPins; i++) {
                err = parse_audio_unit(state, desc->baSourceID[i]);
                if (err < 0)
                if (mixer->protocol == UAC_VERSION_1) {
                        struct uac1_output_terminal_descriptor *desc = p;
 
-                       if (desc->bLength < sizeof(*desc))
-                               continue; /* invalid descriptor? */
                        /* mark terminal ID as visited */
                        set_bit(desc->bTerminalID, state.unitbitmap);
                        state.oterm.id = desc->bTerminalID;
                } else if (mixer->protocol == UAC_VERSION_2) {
                        struct uac2_output_terminal_descriptor *desc = p;
 
-                       if (desc->bLength < sizeof(*desc))
-                               continue; /* invalid descriptor? */
                        /* mark terminal ID as visited */
                        set_bit(desc->bTerminalID, state.unitbitmap);
                        state.oterm.id = desc->bTerminalID;
                } else {  /* UAC_VERSION_3 */
                        struct uac3_output_terminal_descriptor *desc = p;
 
-                       if (desc->bLength < sizeof(*desc))
-                               continue; /* invalid descriptor? */
                        /* mark terminal ID as visited */
                        set_bit(desc->bTerminalID, state.unitbitmap);
                        state.oterm.id = desc->bTerminalID;