Patch "ASoC: Fix use-after-free at card unregistration" has been added to the 4.11-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
ASoC: Fix use-after-free at card unregistration
to the 4.11-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
asoc-fix-use-after-free-at-card-unregistration.patch
and it can be found in the queue-4.11 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
4efda5f2130da033aeedc5b3205569893b910de2Mon Sep 17 00:00:00 2001
From: Takashi Iwai <[email protected]>
Date: Wed, 24 May 2017 10:19:45 +0200
Subject: ASoC: Fix use-after-free at card unregistration
From: Takashi Iwai <[email protected]>
commit 4efda5f2130da033aeedc5b3205569893b910de2 upstream.
soc_cleanup_card_resources() call snd_card_free() at the last of its procedure. This turned out to lead to a use-after-free. PCM runtimes have been already removed via soc_remove_pcm_runtimes(), while it's dereferenced later in soc_pcm_free() called via snd_card_free().
The fix is simple: just move the snd_card_free() call to the beginning of the whole procedure. This also gives another benefit: it guarantees that all operations have been shut down before actually releasing the resources, which was racy until now.
--- sound/soc/soc-core.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
sound/soc/soc-core.c +3 -2
@@ -2286,6 +2286,9 @@ static int soc_cleanup_card_resources(stlist_for_each_entry (rtd, &card->rtd_list, list)flush_delayed_work (&rtd->delayed_work); +/* free the ALSA card at first; this syncs with pending operations */ +snd_card_free (card->snd_card); +/* remove and free each DAI */ soc_remove_dai_links (card);soc_remove_pcm_runtimes (card);
@@ -2300,9 +2303,7 @@ static int soc_cleanup_card_resources(stif (card->remove) card->remove (card); -snd_card_free (card->snd_card);return 0 ; - }/* removes a socdev */
Patches currently in stable-queue which might be from [email protected] are
queue-4.11/alsa-timer-fix-race-between-read-and-ioctl.patch queue-4.11/alsa-timer-fix-missing-queue-indices-reset-at-sndrv_timer_ioctl_select.patch queue-4.11/asoc-fix-use-after-free-at-card-unregistration.patch queue-4.11/ptrace-properly-initialize-ptracer_cred-on-fork.patch queue-4.11/drm-i915-fix-runtime-pm-for-lpe-audio.patch