* [PATCH] ALSA: pcm_oss: Fix use-after-free in poll via io_uring
@ 2026-04-30 2:14 songxiebing
2026-04-30 6:07 ` Takashi Iwai
0 siblings, 1 reply; 2+ messages in thread
From: songxiebing @ 2026-04-30 2:14 UTC (permalink / raw)
To: tiwai, perex
Cc: linux-sound, linux-kernel, songxiebing,
syzbot+ee73befabe68e7907adf
From: Bob Song <songxiebing@kylinos.cn>
Fix use-after-free bug in snd_pcm_oss_poll() caused by
io_uring asynchronous poll operations accessing already-freed
pcm_oss_file private data.
The bug happens because file->private_data still points to
kfree()'d memory after snd_pcm_oss_release(), and io_uring
may invoke ->poll() handler later.
Fix by:
1. Clearing file->private_data early in release function
2. Adding NULL check in release to avoid invalid access
3. Adding NULL check in poll handler to prevent UAF
Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") /* pcm_oss initial */
Reported-by: syzbot+ee73befabe68e7907adf@syzkaller.appspotmail.com
Closes: https://lore.kernel.org/alsa-devel/000000000000f1068105f20e5e8f@google.com/
Signed-off-by: Bob Song <songxiebing@kylinos.cn>
---
sound/core/oss/pcm_oss.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/sound/core/oss/pcm_oss.c b/sound/core/oss/pcm_oss.c
index a140a0d9abb8..f3cebfaaa7dc 100644
--- a/sound/core/oss/pcm_oss.c
+++ b/sound/core/oss/pcm_oss.c
@@ -2574,6 +2574,14 @@ static int snd_pcm_oss_release(struct inode *inode, struct file *file)
struct snd_pcm_oss_file *pcm_oss_file;
pcm_oss_file = file->private_data;
+
+ /* Prevent double-release and NULL dereference */
+ if (!pcm_oss_file)
+ return 0;
+
+ /* Clear private data to avoid UAF from async poll */
+ file->private_data = NULL;
+
substream = pcm_oss_file->streams[SNDRV_PCM_STREAM_PLAYBACK];
if (substream == NULL)
substream = pcm_oss_file->streams[SNDRV_PCM_STREAM_CAPTURE];
@@ -2840,6 +2848,10 @@ static __poll_t snd_pcm_oss_poll(struct file *file, poll_table * wait)
pcm_oss_file = file->private_data;
+ /* Check for already released file to avoid UAF */
+ if (!pcm_oss_file)
+ return EPOLLERR | EPOLLHUP;
+
psubstream = pcm_oss_file->streams[SNDRV_PCM_STREAM_PLAYBACK];
csubstream = pcm_oss_file->streams[SNDRV_PCM_STREAM_CAPTURE];
--
2.25.1
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [PATCH] ALSA: pcm_oss: Fix use-after-free in poll via io_uring
2026-04-30 2:14 [PATCH] ALSA: pcm_oss: Fix use-after-free in poll via io_uring songxiebing
@ 2026-04-30 6:07 ` Takashi Iwai
0 siblings, 0 replies; 2+ messages in thread
From: Takashi Iwai @ 2026-04-30 6:07 UTC (permalink / raw)
To: songxiebing
Cc: tiwai, perex, linux-sound, linux-kernel,
syzbot+ee73befabe68e7907adf
On Thu, 30 Apr 2026 04:14:01 +0200,
songxiebing wrote:
>
> From: Bob Song <songxiebing@kylinos.cn>
>
> Fix use-after-free bug in snd_pcm_oss_poll() caused by
> io_uring asynchronous poll operations accessing already-freed
> pcm_oss_file private data.
>
> The bug happens because file->private_data still points to
> kfree()'d memory after snd_pcm_oss_release(), and io_uring
> may invoke ->poll() handler later.
>
> Fix by:
> 1. Clearing file->private_data early in release function
> 2. Adding NULL check in release to avoid invalid access
> 3. Adding NULL check in poll handler to prevent UAF
>
> Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") /* pcm_oss initial */
> Reported-by: syzbot+ee73befabe68e7907adf@syzkaller.appspotmail.com
> Closes: https://lore.kernel.org/alsa-devel/000000000000f1068105f20e5e8f@google.com/
This is a very old report. Are you sure that it's still valid with
the latest kernel?
I believe this kind of bug should have been already fixed.
(And above all, the suggested code change doesn't look enough as a
proper fix.)
The same question applied for your other two patches for rawmidi and
PCM UAFs.
thanks,
Takashi
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-04-30 6:07 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-30 2:14 [PATCH] ALSA: pcm_oss: Fix use-after-free in poll via io_uring songxiebing
2026-04-30 6:07 ` Takashi Iwai
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox