diff options
| author | Takashi Iwai <[email protected]> | 2011-02-22 09:21:18 +0000 |
|---|---|---|
| committer | Takashi Iwai <[email protected]> | 2011-02-23 07:15:43 +0000 |
| commit | 382225e62bdb8059b7f915b133426425516dd300 (patch) | |
| tree | 25f85ecb38145f3ca1547685066b2bf9057e3c72 /net/unix/af_unix.c | |
| parent | ALSA: HDA: Fix mic initialization in VIA auto parser (diff) | |
| download | kernel-382225e62bdb8059b7f915b133426425516dd300.tar.gz kernel-382225e62bdb8059b7f915b133426425516dd300.zip | |
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 de1b8b93a0ba "[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 <[email protected]>
Cc: <[email protected]>
[CL: also serialize hw_params callback]
Signed-off-by: Clemens Ladisch <[email protected]>
Signed-off-by: Takashi Iwai <[email protected]>
Diffstat (limited to 'net/unix/af_unix.c')
0 files changed, 0 insertions, 0 deletions
