linux/sound/usb
Takashi Iwai 92a586bdc0 ALSA: usb-audio: Fix races at disconnection and PCM closing
When a USB-audio device is disconnected while PCM is still running, we
still see some race: the disconnect callback calls
snd_usb_endpoint_free() that calls release_urbs() and then kfree()
while a PCM stream would be closed at the same time and calls
stop_endpoints() that leads to wait_clear_urbs().  That is, the EP
object might be deallocated while a PCM stream is syncing with
wait_clear_urbs() with the same EP.

Basically calling multiple wait_clear_urbs() would work fine, also
calling wait_clear_urbs() and release_urbs() would work, too, as
wait_clear_urbs() just reads some fields in ep.  The problem is the
succeeding kfree() in snd_pcm_endpoint_free().

This patch moves out the EP deallocation into the later point, the
destructor callback.  At this stage, all PCMs must have been already
closed, so it's safe to free the objects.

Reported-by: Alan Stern <stern@rowland.harvard.edu>
Cc: <stable@vger.kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-06-26 10:33:35 +02:00
..
6fire ALSA: 6fire: Use standard printk helpers 2014-02-26 17:22:09 +01:00
bcd2000 ALSA: MIDI driver for Behringer BCD2000 USB device 2014-04-07 16:05:41 +02:00
caiaq ALSA: usb: Convert to snd_card_new() with a device pointer 2014-02-12 11:18:00 +01:00
hiface ALSA: usb: Convert to snd_card_new() with a device pointer 2014-02-12 11:18:00 +01:00
misc ALSA: usb: Convert to snd_card_new() with a device pointer 2014-02-12 11:18:00 +01:00
usx2y ALSA: usx2y: Don't peep the card internal object 2014-02-17 10:16:25 +01:00
Kconfig ALSA: MIDI driver for Behringer BCD2000 USB device 2014-04-07 16:05:41 +02:00
Makefile ALSA: MIDI driver for Behringer BCD2000 USB device 2014-04-07 16:05:41 +02:00
card.c ALSA: usb-audio: Fix races at disconnection and PCM closing 2014-06-26 10:33:35 +02:00
card.h ALSA: usb-audio: work around corrupted TEAC UD-H01 feedback data 2014-05-02 18:21:55 +02:00
clock.c ALSA: usb-audio: Use standard printk helpers 2014-02-26 16:45:34 +01:00
clock.h ALSA: usb-audio: UAC2: do clock validity check earlier 2013-04-04 08:30:59 +02:00
debug.h ALSA: usb-audio: make hwc_debug a noop in case HW_CONST_DEBUG is not set 2011-05-18 11:44:35 +02:00
endpoint.c ALSA: usb-audio: Fix races at disconnection and PCM closing 2014-06-26 10:33:35 +02:00
endpoint.h ALSA: usb-audio: Fix races at disconnection and PCM closing 2014-06-26 10:33:35 +02:00
format.c ALSA: usb-audio: Use standard printk helpers 2014-02-26 16:45:34 +01:00
format.h ALSA: usb-audio: store protocol version in struct audioformat 2013-06-27 21:59:47 +02:00
helper.c ALSA: usb-audio: support wireless devices in snd_usb_parse_datainterval 2013-10-07 12:52:21 +02:00
helper.h ALSA: usb-audio: increase control transfer timeout 2011-09-27 09:21:48 +02:00
midi.c ALSA: usb-audio: Use standard printk helpers 2014-02-26 16:45:34 +01:00
midi.h ALSA: usb-audio: add support for Akai MPD16 2010-05-21 17:12:30 +02:00
mixer.c ALSA: snd-usb: mixer: remove error messages on failed kmalloc() 2014-05-25 09:09:01 +02:00
mixer.h ALSA: usb-audio: Resume mixer values properly 2014-02-03 09:51:34 +01:00
mixer_maps.c ALSA: usb-audio: work around KEF X300A firmware bug 2014-02-17 10:11:54 +01:00
mixer_quirks.c ALSA: usb-audio: Use standard printk helpers 2014-02-26 16:45:34 +01:00
mixer_quirks.h ALSA: usb-mixer: factor out quirks 2010-03-12 12:20:26 +01:00
pcm.c ALSA: usb-audio: Prevent printk ratelimiting from spamming kernel log while DEBUG not defined 2014-05-02 18:10:59 +02:00
pcm.h ALSA: usb: refine delay information with USB frame counter 2011-09-12 10:30:20 +02:00
power.h ALSA: usbaudio: implement USB autosuspend 2011-03-11 14:59:29 +01:00
proc.c ALSA: usb-audio: proc: use found syncmaxsize to determine feedback format 2013-05-17 08:05:34 +02:00
proc.h ALSA: usb-audio: refactor code 2010-03-05 08:17:14 +01:00
quirks-table.h ALSA: snd-usb: re-order some quirk entries 2014-01-14 14:40:08 +01:00
quirks.c ALSA: usb-audio: Use standard printk helpers 2014-02-26 16:45:34 +01:00
quirks.h ALSA: snd-usb: add quirks handler for DSD streams 2013-04-18 10:03:53 +02:00
stream.c ALSA: usb-audio: Use standard printk helpers 2014-02-26 16:45:34 +01:00
stream.h ALSA: snd-usb: re-order code 2011-09-14 17:07:02 +02:00
usbaudio.h ALSA: usb-audio: Fix deadlocks at resuming 2014-05-02 18:17:06 +02:00