Skip to content

Commit 3532750

Browse files
tiwaigregkh
authored andcommitted
ALSA: usb-audio: Add sanity checks in v2 clock parsers
commit 0a62d6c966956d77397c32836a5bbfe3af786fc1 upstream. 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: 79f920f ("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>
1 parent 0b6cede commit 3532750

1 file changed

Lines changed: 6 additions & 3 deletions

File tree

sound/usb/clock.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ static struct uac_clock_source_descriptor *
4343
while ((cs = snd_usb_find_csint_desc(ctrl_iface->extra,
4444
ctrl_iface->extralen,
4545
cs, UAC2_CLOCK_SOURCE))) {
46-
if (cs->bClockID == clock_id)
46+
if (cs->bLength >= sizeof(*cs) && cs->bClockID == clock_id)
4747
return cs;
4848
}
4949

@@ -59,8 +59,11 @@ static struct uac_clock_selector_descriptor *
5959
while ((cs = snd_usb_find_csint_desc(ctrl_iface->extra,
6060
ctrl_iface->extralen,
6161
cs, UAC2_CLOCK_SELECTOR))) {
62-
if (cs->bClockID == clock_id)
62+
if (cs->bLength >= sizeof(*cs) && cs->bClockID == clock_id) {
63+
if (cs->bLength < 5 + cs->bNrInPins)
64+
return NULL;
6365
return cs;
66+
}
6467
}
6568

6669
return NULL;
@@ -75,7 +78,7 @@ static struct uac_clock_multiplier_descriptor *
7578
while ((cs = snd_usb_find_csint_desc(ctrl_iface->extra,
7679
ctrl_iface->extralen,
7780
cs, UAC2_CLOCK_MULTIPLIER))) {
78-
if (cs->bClockID == clock_id)
81+
if (cs->bLength >= sizeof(*cs) && cs->bClockID == clock_id)
7982
return cs;
8083
}
8184

0 commit comments

Comments
 (0)