mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-04 08:08:54 +00:00
ALSA: usb-audio: Fix UBSAN warnings for MIDI jacks
commit c06ccf3ebb
upstream.
The calculation of in_cables and out_cables bitmaps are done with the
bit shift by the value from the descriptor, which is an arbitrary
value, and can lead to UBSAN shift-out-of-bounds warnings.
Fix it by filtering the bad descriptor values with the check of the
upper bound 0x10 (the cable bitmaps are 16 bits).
Reported-by: syzbot+92e45ae45543f89e8c88@syzkaller.appspotmail.com
Cc: <stable@vger.kernel.org>
Link: https://lore.kernel.org/r/20201223174557.10249-1-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
863f3efde4
commit
913869e458
1 changed files with 4 additions and 0 deletions
|
@ -1867,6 +1867,8 @@ static int snd_usbmidi_get_ms_info(struct snd_usb_midi *umidi,
|
|||
ms_ep = find_usb_ms_endpoint_descriptor(hostep);
|
||||
if (!ms_ep)
|
||||
continue;
|
||||
if (ms_ep->bNumEmbMIDIJack > 0x10)
|
||||
continue;
|
||||
if (usb_endpoint_dir_out(ep)) {
|
||||
if (endpoints[epidx].out_ep) {
|
||||
if (++epidx >= MIDI_MAX_ENDPOINTS) {
|
||||
|
@ -2119,6 +2121,8 @@ static int snd_usbmidi_detect_roland(struct snd_usb_midi *umidi,
|
|||
cs_desc[1] == USB_DT_CS_INTERFACE &&
|
||||
cs_desc[2] == 0xf1 &&
|
||||
cs_desc[3] == 0x02) {
|
||||
if (cs_desc[4] > 0x10 || cs_desc[5] > 0x10)
|
||||
continue;
|
||||
endpoint->in_cables = (1 << cs_desc[4]) - 1;
|
||||
endpoint->out_cables = (1 << cs_desc[5]) - 1;
|
||||
return snd_usbmidi_detect_endpoints(umidi, endpoint, 1);
|
||||
|
|
Loading…
Reference in a new issue