kernel_samsung_a53x/sound
Duoming Zhou 59d40c3942 ALSA: sh: aica: reorder cleanup operations to avoid UAF bugs
commit 051e0840ffa8ab25554d6b14b62c9ab9e4901457 upstream.

The dreamcastcard->timer could schedule the spu_dma_work and the
spu_dma_work could also arm the dreamcastcard->timer.

When the snd_pcm_substream is closing, the aica_channel will be
deallocated. But it could still be dereferenced in the worker
thread. The reason is that del_timer() will return directly
regardless of whether the timer handler is running or not and
the worker could be rescheduled in the timer handler. As a result,
the UAF bug will happen. The racy situation is shown below:

      (Thread 1)                 |      (Thread 2)
snd_aicapcm_pcm_close()          |
 ...                             |  run_spu_dma() //worker
                                 |    mod_timer()
  flush_work()                   |
  del_timer()                    |  aica_period_elapsed() //timer
  kfree(dreamcastcard->channel)  |    schedule_work()
                                 |  run_spu_dma() //worker
  ...                            |    dreamcastcard->channel-> //USE

In order to mitigate this bug and other possible corner cases,
call mod_timer() conditionally in run_spu_dma(), then implement
PCM sync_stop op to cancel both the timer and worker. The sync_stop
op will be called from PCM core appropriately when needed.

Fixes: 198de43d758c ("[ALSA] Add ALSA support for the SEGA Dreamcast PCM device")
Suggested-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Duoming Zhou <duoming@zju.edu.cn>
Message-ID: <20240326094238.95442-1-duoming@zju.edu.cn>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-11-19 09:22:42 +01:00
..
ac97 Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
aoa Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
arm Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
atmel Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
core ALSA: seq: fix function cast warnings 2024-11-19 08:44:53 +01:00
drivers Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
firewire Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
hda ALSA: hda: intel-dspcfg: add filters for ARL-S and ARL 2024-11-18 12:13:18 +01:00
i2c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
isa Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
mips Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
oss/dmasound Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
parisc Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
pci ALSA: hda/realtek - Fix headset Mic no show at resume back for Lenovo ALC897 platform 2024-11-19 09:22:38 +01:00
pcmcia Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ppc Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
sh ALSA: sh: aica: reorder cleanup operations to avoid UAF bugs 2024-11-19 09:22:42 +01:00
soc ASoC: meson: axg-tdm-interface: add frame rate constraint 2024-11-19 08:44:55 +01:00
sparc Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
spi Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
synth Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
usb ALSA: usb-audio: Stop parsing channels bits when all channels are found. 2024-11-19 08:44:57 +01:00
x86 Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
xen Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ac97_bus.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Kconfig Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
last.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Makefile Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
sound_core.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00