From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3D948E7D0AA for ; Thu, 21 Sep 2023 21:16:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232304AbjIUVQg (ORCPT ); Thu, 21 Sep 2023 17:16:36 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46094 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233219AbjIUVP2 (ORCPT ); Thu, 21 Sep 2023 17:15:28 -0400 Received: from madras.collabora.co.uk (madras.collabora.co.uk [46.235.227.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DE2D65253 for ; Thu, 21 Sep 2023 10:08:14 -0700 (PDT) Received: from [192.168.0.125] (unknown [82.76.24.202]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: ehristev) by madras.collabora.co.uk (Postfix) with ESMTPSA id 542A566072EE; Thu, 21 Sep 2023 10:22:51 +0100 (BST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1695288173; bh=5h61+8nLC/rHN8t6PmIBUe2/aZ2dOAIEsl5dm5eSgJA=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=Dzv0gpQSDo0rKOZzDlhbND/2kK6VC1bMm0YlWY+r9vdq/Sfg2whf1875ZtdTQwOks cg0jKDZaJ87PPpjE4cgeq2G2kaw3ybXKOb4HF+EkTwlzlhu69qyisPOAgw/Ek8YgaA r2ILSPR22QLBi767iiaKmTBntRz7DSovd57aM5Tt2N2d3XixEOrz9vs5eftTeUW0ls aV0vcUGCtqZLJ43Yn6sowhzHcyIkjB13XAppWge1fr/FBMMSq88G5U1D7Uau42E+NV k05eDgRjS9fftNKPYsvV9+g4c6fs3Y6fWs+ccTlofX+ujDI/ueRmwuh6rc4OL/De5X MJI+pV4OOqlBg== Message-ID: <3a9a9d52-0db9-360e-55f7-78753428ee7f@collabora.com> Date: Thu, 21 Sep 2023 12:22:47 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.13.0 Subject: Re: [PATCH v4 1/2] drm/mediatek: fix kernel oops if no crtc is found Content-Language: en-US To: Michael Walle , =?UTF-8?Q?N=c3=adcolas_F_=2e_R_=2e_A_=2e_Prado?= , Chun-Kuang Hu , Philipp Zabel , David Airlie , Daniel Vetter , Matthias Brugger , AngeloGioacchino Del Regno Cc: Jitao Shi , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, "Nancy . Lin" , linux-mediatek@lists.infradead.org, Stu Hsieh , linux-arm-kernel@lists.infradead.org References: <20230905084922.3908121-1-mwalle@kernel.org> From: Eugen Hristev In-Reply-To: <20230905084922.3908121-1-mwalle@kernel.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 9/5/23 11:49, Michael Walle wrote: > drm_crtc_from_index(0) might return NULL if there are no CRTCs > registered at all which will lead to a kernel oops in > mtk_drm_crtc_dma_dev_get(). Add the missing return value check. > > Fixes: 0d9eee9118b7 ("drm/mediatek: Add drm ovl_adaptor sub driver for MT8195") > Signed-off-by: Michael Walle > Reviewed-by: NĂ­colas F. R. A. Prado > Tested-by: NĂ­colas F. R. A. Prado > Reviewed-by: AngeloGioacchino Del Regno I tried this patch as well, hit the crash during my tests. I also reviewed your changes Tested-by: Eugen Hristev Reviewed-by: Eugen Hristev Eugen > --- > v4: > - collected tags > v3: > - none > v2: > - collected tags > - fixed typos > --- > drivers/gpu/drm/mediatek/mtk_drm_drv.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c > index 93552d76b6e7..2c582498817e 100644 > --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c > +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c > @@ -420,6 +420,7 @@ static int mtk_drm_kms_init(struct drm_device *drm) > struct mtk_drm_private *private = drm->dev_private; > struct mtk_drm_private *priv_n; > struct device *dma_dev = NULL; > + struct drm_crtc *crtc; > int ret, i, j; > > if (drm_firmware_drivers_only()) > @@ -494,7 +495,9 @@ static int mtk_drm_kms_init(struct drm_device *drm) > } > > /* Use OVL device for all DMA memory allocations */ > - dma_dev = mtk_drm_crtc_dma_dev_get(drm_crtc_from_index(drm, 0)); > + crtc = drm_crtc_from_index(drm, 0); > + if (crtc) > + dma_dev = mtk_drm_crtc_dma_dev_get(crtc); > if (!dma_dev) { > ret = -ENODEV; > dev_err(drm->dev, "Need at least one OVL device\n");