ALSA: control: Protect user controls against concurrent access
authorLars-Peter Clausen <lars@metafoo.de>
Wed, 18 Jun 2014 11:32:31 +0000 (13:32 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 26 Jun 2014 19:12:43 +0000 (15:12 -0400)
commitbe3bae536eaf0a98926006a8ec00417a48b6a587
tree27de4352680a5b05a27fbf27af3d7eee2fdb54ce
parent9c2f4849d76e678d747542389dea63b02a21e29f
ALSA: control: Protect user controls against concurrent access

commit 07f4d9d74a04aa7c72c5dae0ef97565f28f17b92 upstream.

The user-control put and get handlers as well as the tlv do not protect against
concurrent access from multiple threads. Since the state of the control is not
updated atomically it is possible that either two write operations or a write
and a read operation race against each other. Both can lead to arbitrary memory
disclosure. This patch introduces a new lock that protects user-controls from
concurrent access. Since applications typically access controls sequentially
than in parallel a single lock per card should be fine.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Acked-by: Jaroslav Kysela <perex@perex.cz>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
include/sound/core.h
sound/core/control.c
sound/core/init.c