Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp2642727pxj; Mon, 14 Jun 2021 03:51:05 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxdpK+BAJaapNAENTWMiOuevbCUtAhfSLSwZkioIpIwSCg9uNcdbfKr8PC1y2SQAOnAuwKT X-Received: by 2002:a05:6402:74e:: with SMTP id p14mr16224778edy.17.1623667864967; Mon, 14 Jun 2021 03:51:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1623667864; cv=none; d=google.com; s=arc-20160816; b=pTdHbJKFJHygdYcv/JKrACDk2sJzQtaphtzBhtBAB5SFPOTvbRlnMlhRrlQHInScJ4 i5LW8bxzju4tl40ZVz1rzBuIx/wY/V1LbjdWqL0rs+uwPWPvyK+X5MxI6eIPxxIIql3S IjIIjM+J1I4G9Zr6+w7QXGbYwlqPxxs8XhPEn2fLgs1rL/+AffpWxzIECRQ6kwdemaPC ROhXZtazS0YXLHiLuP3wvvNdzlkyj7Ob5kgmg3LZWvvET6jCMUH003Vk6GrbXPUznAhO irLBO9exxS4P+Bgf+RUsn7br2OebQFiMxcva5LQGpBPUrXGvaS2rdLUTbnGzR9EtRY1/ BfUg== 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=s8AulmiMcyABYKIh9/K1PWyAwkCktQMXMTuT3fgOx+A=; b=nS9esq6NjxHRVRUfB9HjKFQZmzFa5bkHPMFvz6YFmkikvnpV5wh5gvG36KGm/otcWC SQKcd7d4MP6cFBvQwPUwhI961Nlnx5x7TdFt+HGxaQTrX3BBt5DdHIHdYZLJbk3iMC5u iHhqdPRBrT48Vka8zVnDyswZiTIc8G+4nMU1tQ3UC+oJrbVJruLlwFZxYVIa//0813is 3s08fPKMoqdW2qEw9o7AhvPUMjeqEKBxoNOUsN3h/5cXRq//PyM3N+u6/h6bBJaROUXL Z0G+5Nq+P7zBY74KZMVw7U0E0+2vaC+FJj02RxJQcoJpgEYEOWw843ERPzQfs5wW9Aez 1OXA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=EwzZqQ8T; 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 dy16si10841645edb.130.2021.06.14.03.50.40; Mon, 14 Jun 2021 03:51:04 -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=EwzZqQ8T; 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 S233411AbhFNKuN (ORCPT + 99 others); Mon, 14 Jun 2021 06:50:13 -0400 Received: from mail.kernel.org ([198.145.29.99]:45350 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233942AbhFNKmR (ORCPT ); Mon, 14 Jun 2021 06:42:17 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 2208961431; Mon, 14 Jun 2021 10:35:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1623666921; bh=ZY4c1guXixpLGl+bH8VS9g/dz2f4w5HOXOLkiD9oRGs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=EwzZqQ8T9QU1LQeYqRLACvG2bwy7EAI+JfZxHLI1bXKxCQxvxH+hlXzIbDqS8YLSA YZAjb6M0T86e5KB6fB5xhOjlhJlZorMW//xOZnzHk4/XmJuNeiiJsnlDxdFVu5EaU8 oDqIhKtB3d6B2uUrYZWn+0PYz0KiTMpznMSr0yiA= 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 4.19 29/67] drm: Fix use-after-free read in drm_getunique() Date: Mon, 14 Jun 2021 12:27:12 +0200 Message-Id: <20210614102644.748489561@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210614102643.797691914@linuxfoundation.org> References: <20210614102643.797691914@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 @@ -112,17 +112,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; }