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
debug.h
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
midi.c ALSA: usb-audio: Use standard printk helpers 2014-02-26 16:45:34 +01:00
midi.h
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
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
power.h
proc.c ALSA: usb-audio: proc: use found syncmaxsize to determine feedback format 2013-05-17 08:05:34 +02:00
proc.h
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
stream.c ALSA: usb-audio: Use standard printk helpers 2014-02-26 16:45:34 +01:00
stream.h
usbaudio.h ALSA: usb-audio: Fix deadlocks at resuming 2014-05-02 18:17:06 +02:00