From nobody Sun Jun 14 12:44:34 2026 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 76FC4386C0B for ; Thu, 2 Apr 2026 21:03:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775163811; cv=none; b=e23Pz8sIXM+vXGmzWN8HgPBGMzjMvnn5p2D41TXL+BZnGeKf7Zq6uICIDhndsJpcpNH1k+MAEDQkoVlh3lK6/vkWQJYGdbJj4OlgQK82j7d0wnh4LDWnDRNnO5Zp0t1ncZMzBqd4VJhMNBXzk2sbCJAG5d51XvTxckN1GjC/GGI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775163811; c=relaxed/simple; bh=WFtLTouS97NFDHoXRNakL9ltYHD3XKXIzlLUjAYz+60=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=Wf67eaJrUir89yMK4+qhz6GkWCOHaqvzTYu6wGDZoxHjfbdaB4J1OV6jiRBhEP/xQXrbSsRWSgGyMhp5pnPp64OwT0NfKWFP4Wyfolt5R+kUivp5Ky2KBX3iqB2etT0SRfRRFyBVTkUbdSUMKbEcZ9DTPhuym+6mk3YYoYdlPYQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=MDBCgvZp; arc=none smtp.client-ip=209.85.128.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="MDBCgvZp" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-486ff201041so13189535e9.1 for ; Thu, 02 Apr 2026 14:03:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775163807; x=1775768607; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:from:to:cc:subject:date:message-id:reply-to; bh=JgKnlABbU2+gqs54PTBh9GtjrgevTzoXvn7hgNc1m2g=; b=MDBCgvZpvRcSZT6JTDYoor4tlCNk2D6h5i/ycb6NByellINYKVA/aqPcwQ79B/xMxu KyZ747QR/HG7s72qwTVhMlYg/Cf2AmgNfnChSx/6CKd9yp8PnqLLKd/jBtgzFowQpNv3 MTQ2P3xtCTm5gzg4/Tn7okP7fo9kFFMC3PAxwSxqwofJZqjBWozYTFHlLnnOPPktdDqf dhHwvaFM1OqdnrYeSUxJ7okZVmhyM4N+eCmKMMqMfxaYKFyVRcpCM01p5clIGaa11UNa CZy9lUMUgayJSRVuAZLrBuoU+UXLzSz2Vbwi9vKkQsylGEO5IDwL4t8zySMeyUn8LhRD JRZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775163807; x=1775768607; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=JgKnlABbU2+gqs54PTBh9GtjrgevTzoXvn7hgNc1m2g=; b=igMFUNjolnMhO/EbgWGUM1s+8pISpD+AN6H+Zkn62HLcx5Z4iFB5ONqvN01hiPy/wS fq5KMI7TQgGdl10kFucabQeJ79gqnTB2IbKA/K3In310vD1xlpD54alAUTbRlTV+dibA tQOAjn3Ov8EDiGQIvPl/ATEsc4YmaM2inM3/YIaRX1dRD4i6yIrYwe34iC5ih+TemuXi FEvlw8cukL6MW11ialkZhNZtLv6FLOXbj6T5ObuaBubhhpOXnIhZ+tWu/48qOn+a9UuL WquEv687qrd+BmaHs7QkaRwB6YsOf4O6yo/uiWfoNwZ3Y28f05K+J7QaHInTkq6vBV1T EluQ== X-Forwarded-Encrypted: i=1; AJvYcCVDg0fn4iofImSLy6X+ueTkzFXevW0+vZUJf377Kn3mCWg6c7iVRV3rHFQkVkY3M4XKFYwjtnsvpXgtrtA=@vger.kernel.org X-Gm-Message-State: AOJu0Yy33CgXM1OHvZqPOv2M/Ajp2Xr9M40HI9EySVtY07x+PpP0AJjC Q3jFJdF7Qd8d5ZGU3fMaPAr1Xy83MWbmU2VI8yTEJuXYS412ESvxPGvm X-Gm-Gg: ATEYQzwDnx2mt7qBYq4oLxpjqSP7YUndmNZclcSJ2iOy2IuxbbXg3Lw1oEDODUTwDjV 22mqpwCpt043t44wYkoYCuFe/j9oukY1Jc7vD5q8Zzgwmc5EX5xHevhIvUS5jdy37YtobVXbPF4 rKfhoU5XKvChPoy2SJSam8lUtj8S1AcdOLpCZzfOYuMcbVExeiWlCvyHc/IN9vLcdHUl2GAyiaO Vv7L1TcZFv6XKDUdSJidD2YbNSHJLpTRN3VuBs3CQmjYzXk3hpsygSRH7cwdTX7UdDi0q6XRNUi g/vVzS765+K297J6a1j8SX8CrZkwc+lGqDyLVNKj9uKtTLIghrqCgj/8jLpIlNOtp3vovOv+5qG A7I4RaHsvA8dnuSWEHWkg09U6KeD+TtIp6X2MrG6QJyvwh+AX9Hrx+5Qzzp+5DMDgFGMhKP9gQU CSf6LLDqXC7cmuat9+A1B+JCm3GexjSOy2e0MulqbF8BjU8yijigiiOIMjTMyUUwKUPAw7r8GsL oG2O3CiG4kZHqgeVlFeGJb1Ya4KstBjxtbm1VDgJQyiRfjH8T8= X-Received: by 2002:a05:600c:c8d:b0:485:4eaf:eb54 with SMTP id 5b1f17b1804b1-48899793093mr7680225e9.20.1775163807304; Thu, 02 Apr 2026 14:03:27 -0700 (PDT) Received: from osama.. (ipservice-092-208-105-189.092.208.pools.vodafone-ip.de. [92.208.105.189]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4887e832585sm409547925e9.6.2026.04.02.14.03.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Apr 2026 14:03:26 -0700 (PDT) From: Osama Abdelkader To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , =?UTF-8?q?Andr=C3=A9=20Almeida?= , Manikandan Muralidharan , Luca Ceresoli , Osama Abdelkader , Kees Cook , Heiko Stuebner , Andy Yan , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH] drm/bridge: dw-mipi-dsi: Fix bridge leak when host attach fails Date: Thu, 2 Apr 2026 23:00:48 +0200 Message-ID: <20260402210054.42074-1-osama.abdelkader@gmail.com> X-Mailer: git-send-email 2.43.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" dw_mipi_dsi_host_attach() and dw_mipi_dsi2_host_attach() call drm_bridge_add() before pdata->host_ops->attach(). If attach fails, the bridge stayed registered without drm_bridge_remove(), leaking the bridge reference and leaving the device on the global bridge list. On failure, undo in the same order as host_detach(): for dw-mipi-dsi, drm_of_panel_bridge_remove() then drm_bridge_remove(); for dw-mipi-dsi2, drm_bridge_remove() then drm_of_panel_bridge_remove(). Fixes: 90910a651123 ("drm/bridge/synopsys: dsi: add ability to have glue-sp= ecific attach and detach") Fixes: 0d6d86253fef ("drm/bridge/synopsys: Add MIPI DSI2 host controller br= idge") Signed-off-by: Osama Abdelkader --- drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c | 7 ++++++- drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi2.c | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c b/drivers/gpu/dr= m/bridge/synopsys/dw-mipi-dsi.c index ca4dea226f4b..ffa169c2de73 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c @@ -345,10 +345,15 @@ static int dw_mipi_dsi_host_attach(struct mipi_dsi_ho= st *host, if (pdata->host_ops && pdata->host_ops->attach) { ret =3D pdata->host_ops->attach(pdata->priv_data, device); if (ret < 0) - return ret; + goto err_remove_bridge; } =20 return 0; + +err_remove_bridge: + drm_of_panel_bridge_remove(host->dev->of_node, 1, 0); + drm_bridge_remove(&dsi->bridge); + return ret; } =20 static int dw_mipi_dsi_host_detach(struct mipi_dsi_host *host, diff --git a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi2.c b/drivers/gpu/d= rm/bridge/synopsys/dw-mipi-dsi2.c index e6eaf9fd0251..d7c922d8841c 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi2.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi2.c @@ -540,10 +540,15 @@ static int dw_mipi_dsi2_host_attach(struct mipi_dsi_h= ost *host, if (pdata->host_ops && pdata->host_ops->attach) { ret =3D pdata->host_ops->attach(pdata->priv_data, device); if (ret < 0) - return ret; + goto err_remove_bridge; } =20 return 0; + +err_remove_bridge: + drm_bridge_remove(&dsi2->bridge); + drm_of_panel_bridge_remove(host->dev->of_node, 1, 0); + return ret; } =20 static int dw_mipi_dsi2_host_detach(struct mipi_dsi_host *host, --=20 2.43.0