]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ALSA: timer: Fix UAF at snd_timer_user_params()
authorTakashi Iwai <tiwai@suse.de>
Sat, 6 Jun 2026 16:11:41 +0000 (18:11 +0200)
committerTakashi Iwai <tiwai@suse.de>
Sun, 7 Jun 2026 07:23:44 +0000 (09:23 +0200)
At releasing a timer object, e.g. when a userspace timer
(CONFIG_SND_UTIMER) gets closed and snd_timer_free() is called, it
tries to detach the timer instances and release the resources.
However, it's still possible that other in-flight tasks are holding
the timer instance where the to-be-deleted timer object is associated,
and this may lead to racy accesses.

Fortunately, most of ioctls dealing with the timer instance list
already have the protection with register_mutex, and this also avoids
such races.  But, SNDRV_TIMER_IOCTL_PARAMS isn't protected, hence the
concurrent ioctl may lead to use-after-free.

This patch just adds the guard with register_mutex to protect
snd_timer_user_params() for covering the code path as a quick
workaround.  It's no hot-path but rather a rarely issued ioctl, so the
performance penalty doesn't matter.

Reported-by: Kyle Zeng <kylebot@openai.com>
Tested-by: Kyle Zeng <kylebot@openai.com>
Cc: <stable@vger.kernel.org>
Link: https://patch.msgid.link/20260606161145.1933447-2-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/core/timer.c

index 67fb1ecb33f0111955be10888bce239fde1295f1..3d72379e57a885d47721bfb46bb1c8698b73f7a1 100644 (file)
@@ -1811,6 +1811,7 @@ static int snd_timer_user_params(struct file *file,
        struct snd_timer *t;
        int err;
 
+       guard(mutex)(&register_mutex);
        tu = file->private_data;
        if (!tu->timeri)
                return -EBADFD;