From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752781AbdLERRU (ORCPT ); Tue, 5 Dec 2017 12:17:20 -0500 Received: from mail-it0-f68.google.com ([209.85.214.68]:37003 "EHLO mail-it0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752260AbdLERRT (ORCPT ); Tue, 5 Dec 2017 12:17:19 -0500 X-Google-Smtp-Source: AGs4zMbkqzamtBznVPD9WP5GSqMpLF3PoHFBlOCrCOW0yp6xyzCs2F3Ci2HSlBkzQ1xpZjU2WmxChg== From: Nick Desaulniers Cc: keescook@chromium.org, Robb Glasser , Nick Desaulniers , Jaroslav Kysela , Takashi Iwai , Markus Elfring , Takashi Sakamoto , Arvind Yadav , alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org Subject: [PATCH] ALSA: pcm: prevent UAF in snd_pcm_info Date: Tue, 5 Dec 2017 09:16:55 -0800 Message-Id: <20171205171657.74392-1-ndesaulniers@google.com> X-Mailer: git-send-email 2.15.0.531.g2ccb3012c9-goog To: unlisted-recipients:; (no To-header on input) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Robb Glasser 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 Signed-off-by: Nick Desaulniers --- 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(®ister_mutex); return err; -- 2.15.0.531.g2ccb3012c9-goog