| From e84749a78dc82bc545f12ce009e3dbcc2c5a8a91 Mon Sep 17 00:00:00 2001 |
| From: Takashi Iwai <tiwai@suse.de> |
| Date: Mon, 10 May 2021 17:06:59 +0200 |
| Subject: ALSA: usb-audio: Validate MS endpoint descriptors |
| |
| From: Takashi Iwai <tiwai@suse.de> |
| |
| commit e84749a78dc82bc545f12ce009e3dbcc2c5a8a91 upstream. |
| |
| snd_usbmidi_get_ms_info() may access beyond the border when a |
| malformed descriptor is passed. This patch adds the sanity checks of |
| the given MS endpoint descriptors, and skips invalid ones. |
| |
| Reported-by: syzbot+6bb23a5d5548b93c94aa@syzkaller.appspotmail.com |
| Cc: <stable@vger.kernel.org> |
| Link: https://lore.kernel.org/r/20210510150659.17710-1-tiwai@suse.de |
| Signed-off-by: Takashi Iwai <tiwai@suse.de> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| sound/usb/midi.c | 4 ++++ |
| 1 file changed, 4 insertions(+) |
| |
| --- a/sound/usb/midi.c |
| +++ b/sound/usb/midi.c |
| @@ -1867,8 +1867,12 @@ static int snd_usbmidi_get_ms_info(struc |
| ms_ep = find_usb_ms_endpoint_descriptor(hostep); |
| if (!ms_ep) |
| continue; |
| + if (ms_ep->bLength <= sizeof(*ms_ep)) |
| + continue; |
| if (ms_ep->bNumEmbMIDIJack > 0x10) |
| continue; |
| + if (ms_ep->bLength < sizeof(*ms_ep) + ms_ep->bNumEmbMIDIJack) |
| + continue; |
| if (usb_endpoint_dir_out(ep)) { |
| if (endpoints[epidx].out_ep) { |
| if (++epidx >= MIDI_MAX_ENDPOINTS) { |