Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp2659260pxj; Mon, 14 Jun 2021 04:15:21 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxF3WA9E8FaBB+QWpQLPpijmw7vRlIc090LP2jBVeLxOv/eQmD12wRrcYUaro/hD2j0Lth5 X-Received: by 2002:a05:6402:14d8:: with SMTP id f24mr16586768edx.79.1623669320930; Mon, 14 Jun 2021 04:15:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1623669320; cv=none; d=google.com; s=arc-20160816; b=XuWPmqygzwiJMIOFBhhbMnsN6e0IphJGnKot8EAoNenEctKEnY7QBlaIWD9jIavJkv HkewlUrpLZslWlHyU5EsGCZJA5FaBQPhY2nUudbhBf85g725m31p4f5wi7jwb/+K2y75 Kp50P9DwKwze/tZbnHKvYPkV43RSIrcPrYdrBgOREcc3XV61Dgoz+RolQYpi1OJZzF0P jZny3jwXQJkXlVw1I7zgaxJZGXgX41rX7E0E0KtEbn61z1p0UDkUwDp1IPd6NBEDFAIT p0zi9PN3RmuHIhMQLOkN+i1CBMl2+Op/iJXVyfrZ6ciGitsp60WZk/4Z90wqXKMIvGAX ZbCA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=DdP3WK8FlxRi1OeSRA1I79/NYxUpdOmO0rTLzqeblkU=; b=XfksvXmoKChho4yXitjnBw1tq9sQXS9EJVoRCaCBZmAfGYufqHqCLmEIWBlItFhpmt db88FmoZ9KTOW3MHIR65qTI4pTr6d7NjBO+PT3QUxYzOAY38bZHRX7gUH67hwnQYfdzX AwjX+jAHlUhX1Nsjf+ColSUGBMd45oSSMFJ8NLdGWmMdMsOclt6maUSovtXC1f0h3pvA aBs3BsZvXaHFUZxr+t7UV6DUwOS/i+nosRX1NhXtIC/CewJ0MYkAwBWaKauFIAvywU33 Y+BMSa4iE9BR9cWjEb5rrISYb73eM4zyBSIPwdXDSHmY5YDsRCb8pwv+rrySV2R8q1zH FuQA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=XbYOL6ZO; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id f8si7075737edk.517.2021.06.14.04.14.58; Mon, 14 Jun 2021 04:15:20 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=XbYOL6ZO; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235046AbhFNLMy (ORCPT + 99 others); Mon, 14 Jun 2021 07:12:54 -0400 Received: from mail.kernel.org ([198.145.29.99]:36770 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233203AbhFNLAp (ORCPT ); Mon, 14 Jun 2021 07:00:45 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 3243061437; Mon, 14 Jun 2021 10:43:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1623667393; bh=tAgHRmkXbDK9L6KTY2aEI9h5uKtmlvcQL2UoUrvwWgI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=XbYOL6ZOCs2HQDVOstnw3sUthnyhqxDTbLzZC0OGIZEst3oD6nwjceJAPQjrnXing 0ulPyWnavDxocOXymqj4s01HG8uJJXoAJw3xbG5vUwqDUfgk71SuQbkmr3Bt/ete5A rN22xe3TO0sk1IAxSzVhvGdwVEksUhpTD3gBv/vI= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, syzbot+c3a706cec1ea99e1c693@syzkaller.appspotmail.com, Desmond Cheong Zhi Xi , Daniel Vetter Subject: [PATCH 5.10 054/131] drm: Fix use-after-free read in drm_getunique() Date: Mon, 14 Jun 2021 12:26:55 +0200 Message-Id: <20210614102654.857406795@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210614102652.964395392@linuxfoundation.org> References: <20210614102652.964395392@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Desmond Cheong Zhi Xi commit b436acd1cf7fac0ba987abd22955d98025c80c2b upstream. There is a time-of-check-to-time-of-use error in drm_getunique() due to retrieving file_priv->master prior to locking the device's master mutex. An example can be seen in the crash report of the use-after-free error found by Syzbot: https://syzkaller.appspot.com/bug?id=148d2f1dfac64af52ffd27b661981a540724f803 In the report, the master pointer was used after being freed. This is because another process had acquired the device's master mutex in drm_setmaster_ioctl(), then overwrote fpriv->master in drm_new_set_master(). The old value of fpriv->master was subsequently freed before the mutex was unlocked. To fix this, we lock the device's master mutex before retrieving the pointer from from fpriv->master. This patch passes the Syzbot reproducer test. Reported-by: syzbot+c3a706cec1ea99e1c693@syzkaller.appspotmail.com Signed-off-by: Desmond Cheong Zhi Xi Cc: stable@vger.kernel.org Signed-off-by: Daniel Vetter Link: https://patchwork.freedesktop.org/patch/msgid/20210608110436.239583-1-desmondcheongzx@gmail.com Signed-off-by: Greg Kroah-Hartman --- drivers/gpu/drm/drm_ioctl.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) --- a/drivers/gpu/drm/drm_ioctl.c +++ b/drivers/gpu/drm/drm_ioctl.c @@ -118,17 +118,18 @@ int drm_getunique(struct drm_device *dev struct drm_file *file_priv) { struct drm_unique *u = data; - struct drm_master *master = file_priv->master; + struct drm_master *master; - mutex_lock(&master->dev->master_mutex); + mutex_lock(&dev->master_mutex); + master = file_priv->master; if (u->unique_len >= master->unique_len) { if (copy_to_user(u->unique, master->unique, master->unique_len)) { - mutex_unlock(&master->dev->master_mutex); + mutex_unlock(&dev->master_mutex); return -EFAULT; } } u->unique_len = master->unique_len; - mutex_unlock(&master->dev->master_mutex); + mutex_unlock(&dev->master_mutex); return 0; }