linux/sound/usb
Takashi Iwai 382225e62b ALSA: usb-audio: fix oops due to cleanup race when disconnecting
When a USB audio device is disconnected, snd_usb_audio_disconnect()
kills all audio URBs.  At the same time, the application, after being
notified of the disconnection, might close the device, in which case
ALSA calls the .hw_free callback, which should free the URBs too.

Commit de1b8b93a0 "[ALSA] Fix hang-up at disconnection of usb-audio"
prevented snd_usb_hw_free() from freeing the URBs to avoid a hang that
resulted from this race, but this introduced another race because the
URB callbacks could now be executed after snd_usb_hw_free() has
returned, and try to access already freed data.

Fix the first race by introducing a mutex to serialize the disconnect
callback and all PCM callbacks that manage URBs (hw_free and hw_params).

Reported-and-tested-by: Pierre-Louis Bossart <pierre-louis.bossart@intel.com>
Cc: <stable@kernel.org>
[CL: also serialize hw_params callback]
Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2011-02-23 08:15:43 +01:00
..
caiaq
misc
usx2y
card.c
card.h
clock.c
clock.h
debug.h
endpoint.c
endpoint.h
format.c
format.h
helper.c
helper.h
Kconfig
Makefile
midi.c
midi.h
mixer.c
mixer.h
mixer_maps.c
mixer_quirks.c
mixer_quirks.h
pcm.c
pcm.h
proc.c
proc.h
quirks-table.h
quirks.c
quirks.h
urb.c
urb.h
usbaudio.h