• Hui Peng's avatar
    ALSA: usb-audio: Fix an OOB bug in parse_audio_mixer_unit · daac0715
    Hui Peng authored
    The `uac_mixer_unit_descriptor` shown as below is read from the
    device side. In `parse_audio_mixer_unit`, `baSourceID` field is
    accessed from index 0 to `bNrInPins` - 1, the current implementation
    assumes that descriptor is always valid (the length  of descriptor
    is no shorter than 5 + `bNrInPins`). If a descriptor read from
    the device side is invalid, it may trigger out-of-bound memory
    access.
    
    ```
    struct uac_mixer_unit_descriptor {
    	__u8 bLength;
    	__u8 bDescriptorType;
    	__u8 bDescriptorSubtype;
    	__u8 bUnitID;
    	__u8 bNrInPins;
    	__u8 baSourceID[];
    }
    ```
    
    This patch fixes the bug by add a sanity check on the length of
    the descriptor.
    Reported-by: default avatarHui Peng <benquike@gmail.com>
    Reported-by: default avatarMathias Payer <mathias.payer@nebelwelt.net>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarHui Peng <benquike@gmail.com>
    Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    daac0715
mixer.c 94.7 KB