From: Takashi Iwai <tiwai@suse.de>
To: Dmitry Vyukov <dvyukov@google.com>
Cc: alsa-devel@alsa-project.org, Jie Yang <yang.jie@intel.com>,
Mark Brown <broonie@kernel.org>, Jaroslav Kysela <perex@perex.cz>,
LKML <linux-kernel@vger.kernel.org>,
Eric Dumazet <edumazet@google.com>,
Alexander Potapenko <glider@google.com>,
Kostya Serebryany <kcc@google.com>,
syzkaller <syzkaller@googlegroups.com>,
Sasha Levin <sasha.levin@oracle.com>
Subject: Re: sound: use-after-free in snd_timer_stop
Date: Tue, 12 Jan 2016 17:52:17 +0100 [thread overview]
Message-ID: <s5hsi22wxj2.wl-tiwai@suse.de> (raw)
In-Reply-To: <CACT4Y+ZF+AQ3nbDUU24NCkHR17PK7yJjdrR8gVEJT1WyyyiWLA@mail.gmail.com>
On Tue, 12 Jan 2016 17:46:15 +0100,
Dmitry Vyukov wrote:
>
> On Tue, Jan 12, 2016 at 3:16 PM, Takashi Iwai <tiwai@suse.de> wrote:
> > On Tue, 12 Jan 2016 15:05:24 +0100,
> > Takashi Iwai wrote:
> >>
> >> On Tue, 12 Jan 2016 11:22:09 +0100,
> >> Dmitry Vyukov wrote:
> >> >
> >> > Hello,
> >> >
> >> > I've hit the following use-after-free while running syzkaller fuzzer.
> >> > It is followed by a splat of other reports and finally kernel death.
> >> > I wasn't able to reproduce it with a standalone C program (there is
> >> > probably some global state involved). But it reproduces by replaying
> >> > fuzzer logs in a loop (you will need Go toolchain):
> >> >
> >> > $ go get github.com/google/syzkaller
> >> > $ cd $GOPATH/src/github.com/google/syzkaller
> >> > $ make executor execprog
> >>
> >> Just a note: I had to run "mkdir bin" beforehand.
> >> Also for my distro, I had to remove -static.
> >>
> >> > $ scp bin/syz-executor bin/syz-execprog your@machine
> >> > $ scp snd_timer_stop your@machine # the attached file
> >> > on test machine:
> >> > $ ./syz-execprog -executor ./syz-executor -cover=0 -repeat=0 -procs=16
> >> > snd_timer_stop
> >>
> >> I tried this but couldn't reproduce the issue on my machine,
> >> unfortunately. (Instead I hit another kernel panic regarding apparmor
> >> :)
> >>
> >> But looking through your log, it seems like a missing race
> >> protection. Does the patch below work for you?
> >
> > Gah, scratch this. The second hunk causes a deadlock.
> > The revised patch is below (just containing the first hunk).
>
> Yes, this patch fixes the crashes for me.
> Reproduction may require running syz-execprog for several minutes.
>
> Tested-by: Dmitry Vyukov <dvyukov@google.com>
Good to hear. FWIW, below is the final patch I'm going to queue.
Thanks!
Takashi
-- 8< --
From: Takashi Iwai <tiwai@suse.de>
Subject: [PATCH] ALSA: seq: Fix race at timer setup and close
ALSA sequencer code has an open race between the timer setup ioctl and
the close of the client. This was triggered by syzkaller fuzzer, and
a use-after-free was caught there as a result.
This patch papers over it by adding a proper queue->timer_mutex lock
around the timer-related calls in the relevant code path.
Reported-by: Dmitry Vyukov <dvyukov@google.com>
Tested-by: Dmitry Vyukov <dvyukov@google.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
sound/core/seq/seq_queue.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/sound/core/seq/seq_queue.c b/sound/core/seq/seq_queue.c
index 7dfd0f429410..0bec02e89d51 100644
--- a/sound/core/seq/seq_queue.c
+++ b/sound/core/seq/seq_queue.c
@@ -142,8 +142,10 @@ static struct snd_seq_queue *queue_new(int owner, int locked)
static void queue_delete(struct snd_seq_queue *q)
{
/* stop and release the timer */
+ mutex_lock(&q->timer_mutex);
snd_seq_timer_stop(q->timer);
snd_seq_timer_close(q);
+ mutex_unlock(&q->timer_mutex);
/* wait until access free */
snd_use_lock_sync(&q->use_lock);
/* release resources... */
--
2.7.0
prev parent reply other threads:[~2016-01-12 16:52 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-12 10:22 sound: use-after-free in snd_timer_stop Dmitry Vyukov
2016-01-12 14:05 ` Takashi Iwai
2016-01-12 14:16 ` Takashi Iwai
2016-01-12 16:46 ` Dmitry Vyukov
2016-01-12 16:52 ` Takashi Iwai [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=s5hsi22wxj2.wl-tiwai@suse.de \
--to=tiwai@suse.de \
--cc=alsa-devel@alsa-project.org \
--cc=broonie@kernel.org \
--cc=dvyukov@google.com \
--cc=edumazet@google.com \
--cc=glider@google.com \
--cc=kcc@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=perex@perex.cz \
--cc=sasha.levin@oracle.com \
--cc=syzkaller@googlegroups.com \
--cc=yang.jie@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox