summaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2018-03-05 22:00:55 +0100
committerBen Hutchings <ben@decadent.org.uk>2018-06-16 22:21:32 +0100
commitdba49ace617b78a0304e8a33a0c274e101ab3abd (patch)
treeb6a22d2f57fda4e89fd10c0dbbf1f7ba27b20305 /sound
parent1786e202fe5a52fe6d4026b9e40c6a824efce148 (diff)
downloadlinux-stable-dba49ace617b78a0304e8a33a0c274e101ab3abd.tar.gz
linux-stable-dba49ace617b78a0304e8a33a0c274e101ab3abd.tar.bz2
linux-stable-dba49ace617b78a0304e8a33a0c274e101ab3abd.zip
ALSA: seq: Don't allow resizing pool in use
commit d85739367c6d56e475c281945c68fdb05ca74b4c upstream. This is a fix for a (sort of) fallout in the recent commit d15d662e89fc ("ALSA: seq: Fix racy pool initializations") for CVE-2018-1000004. As the pool resize deletes the existing cells, it may lead to a race when another thread is writing concurrently, eventually resulting a UAF. A simple workaround is not to allow the pool resizing when the pool is in use. It's an invalid behavior in anyway. Fixes: d15d662e89fc ("ALSA: seq: Fix racy pool initializations") Reported-by: 范龙飞 <long7573@126.com> Reported-by: Nicolai Stange <nstange@suse.de> Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Diffstat (limited to 'sound')
-rw-r--r--sound/core/seq/seq_clientmgr.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/sound/core/seq/seq_clientmgr.c b/sound/core/seq/seq_clientmgr.c
index dee6691013c1..99486e1eeec4 100644
--- a/sound/core/seq/seq_clientmgr.c
+++ b/sound/core/seq/seq_clientmgr.c
@@ -1929,6 +1929,9 @@ static int snd_seq_ioctl_set_client_pool(struct snd_seq_client *client,
(! snd_seq_write_pool_allocated(client) ||
info.output_pool != client->pool->size)) {
if (snd_seq_write_pool_allocated(client)) {
+ /* is the pool in use? */
+ if (atomic_read(&client->pool->counter))
+ return -EBUSY;
/* remove all existing cells */
snd_seq_pool_mark_closing(client->pool);
snd_seq_queue_client_leave_cells(client->number);