Skip to content

Commit ca79412

Browse files
tiwaigregkh
authored andcommitted
ALSA: line6: Fix leftover URB at error-path during probe
commit c95072b upstream. While line6_probe() may kick off URB for a control MIDI endpoint, the function doesn't clean up it properly at its error path. This results in a leftover URB action that is eventually triggered later and causes an Oops like: general protection fault: 0000 [#1] PREEMPT SMP KASAN CPU: 1 PID: 0 Comm: swapper/1 Not tainted RIP: 0010:usb_fill_bulk_urb ./include/linux/usb.h:1619 RIP: 0010:line6_start_listen+0x3fe/0x9e0 sound/usb/line6/driver.c:76 Call Trace: <IRQ> line6_data_received+0x1f7/0x470 sound/usb/line6/driver.c:326 __usb_hcd_giveback_urb+0x2e0/0x650 drivers/usb/core/hcd.c:1779 usb_hcd_giveback_urb+0x337/0x420 drivers/usb/core/hcd.c:1845 dummy_timer+0xba9/0x39f0 drivers/usb/gadget/udc/dummy_hcd.c:1965 call_timer_fn+0x2a2/0x940 kernel/time/timer.c:1281 .... Since the whole clean-up procedure is done in line6_disconnect() callback, we can simply call it in the error path instead of open-coding the whole again. It'll fix such an issue automagically. The bug was spotted by syzkaller. Fixes: eedd0e9 ("ALSA: line6: Don't forget to call driver's destructor at error path") Reported-by: Andrey Konovalov <andreyknvl@google.com> Tested-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 8b96981 commit ca79412

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

sound/usb/line6/driver.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -779,9 +779,10 @@ int line6_probe(struct usb_interface *interface,
779779
return 0;
780780

781781
error:
782-
if (line6->disconnect)
783-
line6->disconnect(line6);
784-
snd_card_free(card);
782+
/* we can call disconnect callback here because no close-sync is
783+
* needed yet at this point
784+
*/
785+
line6_disconnect(interface);
785786
return ret;
786787
}
787788
EXPORT_SYMBOL_GPL(line6_probe);

0 commit comments

Comments
 (0)