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 X-Spam-Level: X-Spam-Status: No, score=-13.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 10A1CC433E9 for ; Wed, 20 Jan 2021 17:16:46 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id CC7C922CE3 for ; Wed, 20 Jan 2021 17:16:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404164AbhATRQn convert rfc822-to-8bit (ORCPT ); Wed, 20 Jan 2021 12:16:43 -0500 Received: from aposti.net ([89.234.176.197]:43934 "EHLO aposti.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2403932AbhATRNx (ORCPT ); Wed, 20 Jan 2021 12:13:53 -0500 Date: Wed, 20 Jan 2021 16:25:16 +0000 From: Paul Cercueil Subject: Re: [PATCH v2 1/3] drm: bridge/panel: Cleanup connector on bridge detach To: Daniel Vetter Cc: David Airlie , Sam Ravnborg , Laurent Pinchart , od@zcrc.me, dri-devel , Linux Kernel Mailing List , stable , Andrzej Hajda , Neil Armstrong , Jonas Karlman , Jernej Skrabec Message-Id: <4YQ8NQ.HNQ7IMBKVEBV2@crapouillou.net> In-Reply-To: References: <20210120123535.40226-1-paul@crapouillou.net> <20210120123535.40226-2-paul@crapouillou.net> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1; format=flowed Content-Transfer-Encoding: 8BIT Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Le mer. 20 janv. 2021 à 17:03, Daniel Vetter a écrit : > On Wed, Jan 20, 2021 at 1:35 PM Paul Cercueil > wrote: >> >> If we don't call drm_connector_cleanup() manually in >> panel_bridge_detach(), the connector will be cleaned up with the >> other >> DRM objects in the call to drm_mode_config_cleanup(). However, >> since our >> drm_connector is devm-allocated, by the time >> drm_mode_config_cleanup() >> will be called, our connector will be long gone. Therefore, the >> connector must be cleaned up when the bridge is detached to avoid >> use-after-free conditions. > > For -fixes this sounds ok, but for -next I think switching to drmm_ > would be much better. The API would need to change to have access to the drm_device struct, though. That would be quite a big patch, there are a few dozens source files that use this API already. Cheers, -Paul > >> v2: Cleanup connector only if it was created >> >> Fixes: 13dfc0540a57 ("drm/bridge: Refactor out the panel wrapper >> from the lvds-encoder bridge.") >> Cc: # 4.12+ >> Cc: Andrzej Hajda >> Cc: Neil Armstrong >> Cc: Laurent Pinchart >> Cc: Jonas Karlman >> Cc: Jernej Skrabec >> Signed-off-by: Paul Cercueil >> --- >> drivers/gpu/drm/bridge/panel.c | 6 ++++++ >> 1 file changed, 6 insertions(+) >> >> diff --git a/drivers/gpu/drm/bridge/panel.c >> b/drivers/gpu/drm/bridge/panel.c >> index 0ddc37551194..df86b0ee0549 100644 >> --- a/drivers/gpu/drm/bridge/panel.c >> +++ b/drivers/gpu/drm/bridge/panel.c >> @@ -87,6 +87,12 @@ static int panel_bridge_attach(struct drm_bridge >> *bridge, >> >> static void panel_bridge_detach(struct drm_bridge *bridge) >> { >> + struct panel_bridge *panel_bridge = >> drm_bridge_to_panel_bridge(bridge); >> + struct drm_connector *connector = &panel_bridge->connector; >> + >> + /* Cleanup the connector if we know it was initialized */ >> + if (!!panel_bridge->connector.dev) >> + drm_connector_cleanup(connector); >> } >> >> static void panel_bridge_pre_enable(struct drm_bridge *bridge) >> -- >> 2.29.2 >> > > > -- > Daniel Vetter > Software Engineer, Intel Corporation > http://blog.ffwll.ch