Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp2640286pxj; Mon, 14 Jun 2021 03:46:53 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyj/qPUb1uOt4rYGvbAPtF7kIPpq/iKRc6gZ9/w0SGJwpENFFKdjuvoejrOrlqkTztrUDVR X-Received: by 2002:a17:906:2844:: with SMTP id s4mr14536028ejc.263.1623667613189; Mon, 14 Jun 2021 03:46:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1623667613; cv=none; d=google.com; s=arc-20160816; b=igZZ5oPuqgArFG0sdBO5G6dF3cSt8pyrBuSr7kkoWMW9T2lmr4QxvNe3YyKU667Bf6 hA4y6xK+IyG6XowOs8Zf552XvMoP/zNJ/1ZWfQ8yNe41M578hiSyo9ESxs0nWNMf7IJ4 MPrblZeywcWBRBqJ6W5uOKAE1+56LqcF+SiGaho6HZIYX3IGvk4zTaHYI9lCUSJyOcix GJsffzUjV9EGhNGKlOB9fCvM0Eo6svdhqcMgQd/wHhexCnLaZOMzP9oeatnuqHkMC1S2 UMtsYyHLuBXlgb63wzzuZCwEtULWrZA3r7h5WFfYZRlLmOZjgCaFCmjfMhjTaqZlayLi 4/1g== 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=mEjpbAq+dMKdG06kQT0g4b2lnQSyRRReNa45E2BH35ax0YJZaEo7Zx4dvKcCGhPPxF 6qiHWY3ASmlbkqlTeq0IT8wu+4+dKAzXmn8cFB3rrgscE6jBoMVpqdOh+BCIuAZ+L7fe OYkGtycAHfciKSqvNyFCkHtPjPCVfKjb1EOYTe7mJX5j6ph1sGQdqeSUr/acAHV3d0XZ LSk7J/SrjC9v1y39LFZErxB5NnrDTBQMsJVFRKYXm7Qp9CLcQ0+q6WZKy0zBgQl7b5/+ jzihAGQOyAVt1D0FAxgBIIZDWd9vs8tBmieG/W+N0pgvyoJ3P8YR5EAbk+AmbDegAoyX JYWQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=lye3Lpas; 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 12si4713113ejg.494.2021.06.14.03.46.26; Mon, 14 Jun 2021 03:46:53 -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=lye3Lpas; 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 S234340AbhFNKo7 (ORCPT + 99 others); Mon, 14 Jun 2021 06:44:59 -0400 Received: from mail.kernel.org ([198.145.29.99]:45918 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233829AbhFNKiT (ORCPT ); Mon, 14 Jun 2021 06:38:19 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 5D3C9613F1; Mon, 14 Jun 2021 10:33:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1623666837; bh=ZY4c1guXixpLGl+bH8VS9g/dz2f4w5HOXOLkiD9oRGs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=lye3Lpas5OqIGcSOf3YqauYtEZTD58MvA+UX1EJrNsFUOfyhLPVPc6SCIZx/8U+7D ddm/6In5phgVI+JebHbKKhIXTKqaKz9nFwhpH0Jht5fhsQoHuaMq1XmnH/FC+zGVkw GIaGP1y0zeGJwox4Vp61FNg7y+1wALkCVDybth5g= 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.14 21/49] drm: Fix use-after-free read in drm_getunique() Date: Mon, 14 Jun 2021 12:27:14 +0200 Message-Id: <20210614102642.560431650@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210614102641.857724541@linuxfoundation.org> References: <20210614102641.857724541@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; }