FAILED: patch "[PATCH] drm: bridge/panel: Cleanup connector on bridge detach" failed to apply to 4.19-stable tree
Subsystems (4)
[email protected]
maintainerThe patch below does not apply to the 4.19-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 4d906839d321c2efbf3fed4bc31ffd9ff55b75c0 Mon Sep 17 00:00:00 2001
From: Paul Cercueil <[email protected]>
Date: Sat, 27 Mar 2021 11:57:40 +0000
Subject: [PATCH] drm: bridge/panel: Cleanup connector on bridge detach
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
drivers/gpu/drm/bridge/panel.c +12 -0
@@ -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)