Re: [PATCH v2] ALSA: pcm: oss: use proper stream lock for runtime->state access
From: Takashi Iwai
Date: Mon Mar 16 2026 - 13:06:43 EST
On Mon, 16 Mar 2026 09:50:47 +0100,
Cen Zhang wrote:
>
> __snd_pcm_set_state() writes runtime->state under the PCM stream lock.
> However, the OSS I/O functions snd_pcm_oss_write3(), snd_pcm_oss_read3(),
> snd_pcm_oss_writev3() and snd_pcm_oss_readv3() read runtime->state
> without holding the stream lock, only holding oss.params_lock (a
> different mutex that does not synchronize with the stream lock).
>
> Since __snd_pcm_set_state() is called from IRQ context (e.g.,
> snd_pcm_period_elapsed -> snd_pcm_update_state -> __snd_pcm_xrun ->
> snd_pcm_stop -> snd_pcm_post_stop) while the OSS read/write paths
> run in process context, these are concurrent accesses that constitute
> a data race.
>
> Rather than using READ_ONCE()/WRITE_ONCE() barriers, introduce a
> snd_pcm_get_state() helper that reads runtime->state under the stream
> lock, matching the locking discipline used elsewhere in the PCM layer.
> Also export snd_pcm_set_state() for completeness.
>
> Use snd_pcm_get_state() in all four OSS I/O functions, caching the
> result in a local variable where the same snapshot is used for
> multiple comparisons to avoid taking the lock repeatedly.
>
> Signed-off-by: Cen Zhang <zzzccc427@xxxxxxxxx>
Applied to for-next branch now. Thanks.
Takashi