ALSA: seq: Fix racy cell insertions during snd_seq_pool_done()
authorTakashi Iwai <tiwai@suse.de>
Tue, 21 Mar 2017 12:56:04 +0000 (13:56 +0100)
committerDanny Wood <danwood76@gmail.com>
Tue, 29 Jan 2019 13:16:52 +0000 (13:16 +0000)
commitcdceba77779e417a85b321a31005846ea254135c
treee6c8e9083e0c735610317c31bde8d4fc71dd2d26
parentabc9932edf6d61058c4b149baa8d342b3868aa32
ALSA: seq: Fix racy cell insertions during snd_seq_pool_done()

commit c520ff3d03f0b5db7146d9beed6373ad5d2a5e0e upstream.

When snd_seq_pool_done() is called, it marks the closing flag to
refuse the further cell insertions.  But snd_seq_pool_done() itself
doesn't clear the cells but just waits until all cells are cleared by
the caller side.  That is, it's racy, and this leads to the endless
stall as syzkaller spotted.

This patch addresses the racy by splitting the setup of pool->closing
flag out of snd_seq_pool_done(), and calling it properly before
snd_seq_pool_done().

BugLink: http://lkml.kernel.org/r/CACT4Y+aqqy8bZA1fFieifNxR2fAfFQQABcBHj801+u5ePV0URw@mail.gmail.com
Reported-and-tested-by: Dmitry Vyukov <dvyukov@google.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Willy Tarreau <w@1wt.eu>
sound/core/seq/seq_clientmgr.c
sound/core/seq/seq_fifo.c
sound/core/seq/seq_memory.c
sound/core/seq/seq_memory.h