public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] ALSA: pcm: prevent UAF in snd_pcm_info
@ 2017-12-05 17:16 Nick Desaulniers
  2017-12-05 17:19 ` Nick Desaulniers
  2017-12-05 19:14 ` Takashi Iwai
  0 siblings, 2 replies; 6+ messages in thread
From: Nick Desaulniers @ 2017-12-05 17:16 UTC (permalink / raw)
  Cc: keescook, Robb Glasser, Nick Desaulniers, Jaroslav Kysela,
	Takashi Iwai, Markus Elfring, Takashi Sakamoto, Arvind Yadav,
	alsa-devel, linux-kernel

From: Robb Glasser <rglasser@google.com>

When the device descriptor is closed, the `substream->runtime` pointer
is freed. But another thread may be in the ioctl handler, case
SNDRV_CTL_IOCTL_PCM_INFO. This case calls snd_pcm_info_user() which
calls snd_pcm_info() which accesses the now freed `substream->runtime`.

Signed-off-by: Robb Glasser <rglasser@google.com>
Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
---
 sound/core/pcm.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/sound/core/pcm.c b/sound/core/pcm.c
index 9070f277f8db..09ee8c6b9f75 100644
--- a/sound/core/pcm.c
+++ b/sound/core/pcm.c
@@ -153,7 +153,9 @@ static int snd_pcm_control_ioctl(struct snd_card *card,
 				err = -ENXIO;
 				goto _error;
 			}
+			mutex_lock(&pcm->open_mutex);
 			err = snd_pcm_info_user(substream, info);
+			mutex_unlock(&pcm->open_mutex);
 		_error:
 			mutex_unlock(&register_mutex);
 			return err;
-- 
2.15.0.531.g2ccb3012c9-goog

^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2017-12-05 22:30 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-12-05 17:16 [PATCH] ALSA: pcm: prevent UAF in snd_pcm_info Nick Desaulniers
2017-12-05 17:19 ` Nick Desaulniers
2017-12-05 17:26   ` Greg KH
2017-12-05 19:14 ` Takashi Iwai
2017-12-05 19:29   ` Kees Cook
2017-12-05 22:30     ` Takashi Iwai

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox