| From b09c551c77c7e01dc6e4f3c8bf06b5ffa7b06db5 Mon Sep 17 00:00:00 2001 |
| From: Oswald Buddenhagen <oswald.buddenhagen@gmx.de> |
| Date: Wed, 5 Apr 2023 22:12:20 +0200 |
| Subject: ALSA: emu10k1: fix capture interrupt handler unlinking |
| |
| From: Oswald Buddenhagen <oswald.buddenhagen@gmx.de> |
| |
| commit b09c551c77c7e01dc6e4f3c8bf06b5ffa7b06db5 upstream. |
| |
| Due to two copy/pastos, closing the MIC or EFX capture device would |
| make a running ADC capture hang due to unsetting its interrupt handler. |
| In principle, this would have also allowed dereferencing dangling |
| pointers, but we're actually rather thorough at disabling and flushing |
| the ints. |
| |
| While it may sound like one, this actually wasn't a hypothetical bug: |
| PortAudio will open a capture stream at startup (and close it right |
| away) even if not asked to. If the first device is busy, it will just |
| proceed with the next one ... thus killing a concurrent capture. |
| |
| Signed-off-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de> |
| Cc: <stable@vger.kernel.org> |
| Link: https://lore.kernel.org/r/20230405201220.2197923-1-oswald.buddenhagen@gmx.de |
| Signed-off-by: Takashi Iwai <tiwai@suse.de> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| sound/pci/emu10k1/emupcm.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| --- a/sound/pci/emu10k1/emupcm.c |
| +++ b/sound/pci/emu10k1/emupcm.c |
| @@ -1236,7 +1236,7 @@ static int snd_emu10k1_capture_mic_close |
| { |
| struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream); |
| |
| - emu->capture_interrupt = NULL; |
| + emu->capture_mic_interrupt = NULL; |
| emu->pcm_capture_mic_substream = NULL; |
| return 0; |
| } |
| @@ -1344,7 +1344,7 @@ static int snd_emu10k1_capture_efx_close |
| { |
| struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream); |
| |
| - emu->capture_interrupt = NULL; |
| + emu->capture_efx_interrupt = NULL; |
| emu->pcm_capture_efx_substream = NULL; |
| return 0; |
| } |