diff options
author | Takashi Iwai <tiwai@suse.de> | 2020-07-10 16:33:51 +0300 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2020-07-22 10:32:08 +0300 |
commit | 5ca7b059ee4b099ecf56b5468cedfbba7e98b9e5 (patch) | |
tree | 8bbd8ad93aa5d5c2f01836743f3185f196c0b15d /sound/usb | |
parent | 074a3ea55aa0cdc8f71c92ab45ca01d956e3d95c (diff) | |
download | linux-5ca7b059ee4b099ecf56b5468cedfbba7e98b9e5.tar.xz |
ALSA: line6: Perform sanity check for each URB creation
commit 6e8a914ad619042c5f25a4feb663357c4170fd8d upstream.
LINE6 drivers create stream URBs with a fixed pipe without checking
its validity, and this may lead to a kernel WARNING at the submission
when a malformed USB descriptor is passed.
For avoiding the kernel warning, perform the similar sanity checks for
each pipe type at creating a URB.
Reported-by: syzbot+c190f6858a04ea7fbc52@syzkaller.appspotmail.com
Cc: <stable@vger.kernel.org>
Link: https://lore.kernel.org/r/s5hv9iv4hq8.wl-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'sound/usb')
-rw-r--r-- | sound/usb/line6/capture.c | 2 | ||||
-rw-r--r-- | sound/usb/line6/playback.c | 2 |
2 files changed, 4 insertions, 0 deletions
diff --git a/sound/usb/line6/capture.c b/sound/usb/line6/capture.c index d8a14d769f48..8efd9f00cb72 100644 --- a/sound/usb/line6/capture.c +++ b/sound/usb/line6/capture.c @@ -291,6 +291,8 @@ int line6_create_audio_in_urbs(struct snd_line6_pcm *line6pcm) urb->interval = LINE6_ISO_INTERVAL; urb->error_count = 0; urb->complete = audio_in_callback; + if (usb_urb_ep_type_check(urb)) + return -EINVAL; } return 0; diff --git a/sound/usb/line6/playback.c b/sound/usb/line6/playback.c index dec89d2beb57..3fb86318f9c6 100644 --- a/sound/usb/line6/playback.c +++ b/sound/usb/line6/playback.c @@ -436,6 +436,8 @@ int line6_create_audio_out_urbs(struct snd_line6_pcm *line6pcm) urb->interval = LINE6_ISO_INTERVAL; urb->error_count = 0; urb->complete = audio_out_callback; + if (usb_urb_ep_type_check(urb)) + return -EINVAL; } return 0; |