ALSA: usxy2: Fix potential doubly allocations
The PCM shmem pages are allocated in snd_usx2y_usbpcm_prepare(). Theoretically the prepare callback may be called simultaneously for both playback and capture, hence this allocation can be racy. Make sure that the allocation is performed exclusively by extending the pcm_mutex lock to cover the allocation code, too. Link: https://lore.kernel.org/r/20210517131545.27252-8-tiwai@suse.de Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
02d382af1c
commit
c1f2484168
@ -503,15 +503,18 @@ static int snd_usx2y_usbpcm_prepare(struct snd_pcm_substream *substream)
|
||||
|
||||
snd_printdd("snd_usx2y_pcm_prepare(%p)\n", substream);
|
||||
|
||||
mutex_lock(&usx2y->pcm_mutex);
|
||||
|
||||
if (!usx2y->hwdep_pcm_shm) {
|
||||
usx2y->hwdep_pcm_shm = alloc_pages_exact(USX2Y_HWDEP_PCM_PAGES,
|
||||
GFP_KERNEL);
|
||||
if (!usx2y->hwdep_pcm_shm)
|
||||
return -ENOMEM;
|
||||
if (!usx2y->hwdep_pcm_shm) {
|
||||
err = -ENOMEM;
|
||||
goto up_prepare_mutex;
|
||||
}
|
||||
memset(usx2y->hwdep_pcm_shm, 0, USX2Y_HWDEP_PCM_PAGES);
|
||||
}
|
||||
|
||||
mutex_lock(&usx2y->pcm_mutex);
|
||||
usx2y_subs_prepare(subs);
|
||||
// Start hardware streams
|
||||
// SyncStream first....
|
||||
|
Loading…
Reference in New Issue
Block a user