Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp2189862pxf; Sat, 27 Mar 2021 05:00:59 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzWuYGrVQsgOorDex2VPIJeOXdjUjgLgh1K7h0zenvsERqOrBFIbc8yM3JBd3zvijbmTH52 X-Received: by 2002:aa7:c7c5:: with SMTP id o5mr19619893eds.31.1616846459648; Sat, 27 Mar 2021 05:00:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1616846459; cv=none; d=google.com; s=arc-20160816; b=U11nF6iWvr4TeP+FSqXyX1aqjHPreGkRhsxYC3yQKBJi4nbfHgcYdArQVoPkkwoz+C WTfT+31ZdTeOpxUDs8yU30WTE5cQZfGckB5zo8/QDAW0dgTaXtw+FsAsFs+XFJrcNeKf vbrNb8i8+B3jeGnOH7S/AfOyvA75/1gUYhihD+FZ3b+HdXSIXrPORtDRnuIdSoLbdIiu Qg9RTrHdyzH7szr19s4WwHvBakLFbi2smQRKKYbRt7ct62RAs+wjpUO/eXQ5zjMB67LQ XcH0Gue6O36aW+lf59C0glez3UuHiHJF8rz2MNyD6TBBJTGqMe93cK1K+88BcAw3ogV1 BxqA== 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 :references:in-reply-to:message-id:date:subject:cc:to:from; bh=XRC4g7nbScuMFiya6s2ntuo37aWqkNnG4wWw2bfM694=; b=yyhNzwZyuaTvKhsNsTTvRZ1952wfP6vcz/CZNerjNi1u7jHb7A8ntMCeuCbMcU/Fjy 0i5D9v3SbyRbEdBsxXzP0qOLMHCAEkIs9W6idUhkOKZExkfVWnKZtzSGJwb7H3PZrxy3 GTsp6dptjO8E9m/WK1LKlDdI/ai0rTqSc7C6bU13SXbJmyvnDF9zgF2g5YMKO6QW+HXh hvQfbFHPeynNmEaxngneRTRDglAburxXA2aoU1KTnTUIyfGzjwWGp7jHGU4FW/D+vIN/ 9JckmaPki5jWlBjn/9/GXSkrJdoxoL3YylYyZW+iEUEbc06BeiRwlTKBAcX48u1dQlWy XHFw== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=crapouillou.net Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id bz20si9169157ejc.368.2021.03.27.05.00.36; Sat, 27 Mar 2021 05:00:59 -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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=crapouillou.net Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231580AbhC0L6H (ORCPT + 99 others); Sat, 27 Mar 2021 07:58:07 -0400 Received: from aposti.net ([89.234.176.197]:58558 "EHLO aposti.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230322AbhC0L6G (ORCPT ); Sat, 27 Mar 2021 07:58:06 -0400 From: Paul Cercueil To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart Cc: Sam Ravnborg , David Airlie , Daniel Vetter , od@zcrc.me, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org, Paul Cercueil , stable@vger.kernel.org, Jonas Karlman , Jernej Skrabec , Laurent Pinchart Subject: [PATCH v4 1/3] drm: bridge/panel: Cleanup connector on bridge detach Date: Sat, 27 Mar 2021 11:57:40 +0000 Message-Id: <20210327115742.18986-2-paul@crapouillou.net> In-Reply-To: <20210327115742.18986-1-paul@crapouillou.net> References: <20210327115742.18986-1-paul@crapouillou.net> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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. v2: Cleanup connector only if it was created v3: Add FIXME v4: (Use connector->dev) directly in if() block 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 Reviewed-by: Laurent Pinchart --- drivers/gpu/drm/bridge/panel.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/drivers/gpu/drm/bridge/panel.c b/drivers/gpu/drm/bridge/panel.c index 0ddc37551194..c916f4b8907e 100644 --- a/drivers/gpu/drm/bridge/panel.c +++ b/drivers/gpu/drm/bridge/panel.c @@ -87,6 +87,18 @@ 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. + * + * FIXME: This wouldn't be needed if the panel_bridge structure was + * allocated with drmm_kzalloc(). This might be tricky since the + * drm_device pointer can only be retrieved when the bridge is attached. + */ + if (connector->dev) + drm_connector_cleanup(connector); } static void panel_bridge_pre_enable(struct drm_bridge *bridge) -- 2.30.2