mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 10:31:46 +09:00
ALSA: usb-audio: Add sanity checks in v2 clock parsers
commit0a62d6c966upstream. The helper functions to parse and look for the clock source, selector and multiplier unit may return the descriptor with a too short length than required, while there is no sanity check in the caller side. Add some sanity checks in the parsers, at least, to guarantee the given descriptor size, for avoiding the potential crashes. Fixes:79f920fbff("ALSA: usb-audio: parse clock topology of UAC2 devices") Reported-by: Andrey Konovalov <andreyknvl@google.com> Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
5f7873c994
commit
47f25441ff
@@ -43,7 +43,7 @@ static struct uac_clock_source_descriptor *
|
||||
while ((cs = snd_usb_find_csint_desc(ctrl_iface->extra,
|
||||
ctrl_iface->extralen,
|
||||
cs, UAC2_CLOCK_SOURCE))) {
|
||||
if (cs->bClockID == clock_id)
|
||||
if (cs->bLength >= sizeof(*cs) && cs->bClockID == clock_id)
|
||||
return cs;
|
||||
}
|
||||
|
||||
@@ -59,8 +59,11 @@ static struct uac_clock_selector_descriptor *
|
||||
while ((cs = snd_usb_find_csint_desc(ctrl_iface->extra,
|
||||
ctrl_iface->extralen,
|
||||
cs, UAC2_CLOCK_SELECTOR))) {
|
||||
if (cs->bClockID == clock_id)
|
||||
if (cs->bLength >= sizeof(*cs) && cs->bClockID == clock_id) {
|
||||
if (cs->bLength < 5 + cs->bNrInPins)
|
||||
return NULL;
|
||||
return cs;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
@@ -75,7 +78,7 @@ static struct uac_clock_multiplier_descriptor *
|
||||
while ((cs = snd_usb_find_csint_desc(ctrl_iface->extra,
|
||||
ctrl_iface->extralen,
|
||||
cs, UAC2_CLOCK_MULTIPLIER))) {
|
||||
if (cs->bClockID == clock_id)
|
||||
if (cs->bLength >= sizeof(*cs) && cs->bClockID == clock_id)
|
||||
return cs;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user