Skip to content

Commit be19b43

Browse files
osamakaderlucaceresoli
authored andcommitted
drm/bridge: dw-mipi-dsi: Fix bridge leak when host attach fails
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. Fixes: 90910a6 ("drm/bridge/synopsys: dsi: add ability to have glue-specific attach and detach") Fixes: 0d6d862 ("drm/bridge/synopsys: Add MIPI DSI2 host controller bridge") Signed-off-by: Osama Abdelkader <osama.abdelkader@gmail.com> Reviewed-by: Luca Ceresoli <luca.ceresoli@bootlin.com> Link: https://patch.msgid.link/20260403145208.15890-1-osama.abdelkader@gmail.com Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
1 parent ad3ac32 commit be19b43

2 files changed

Lines changed: 10 additions & 2 deletions

File tree

drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -345,10 +345,14 @@ static int dw_mipi_dsi_host_attach(struct mipi_dsi_host *host,
345345
if (pdata->host_ops && pdata->host_ops->attach) {
346346
ret = pdata->host_ops->attach(pdata->priv_data, device);
347347
if (ret < 0)
348-
return ret;
348+
goto err_remove_bridge;
349349
}
350350

351351
return 0;
352+
353+
err_remove_bridge:
354+
drm_bridge_remove(&dsi->bridge);
355+
return ret;
352356
}
353357

354358
static int dw_mipi_dsi_host_detach(struct mipi_dsi_host *host,

drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi2.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -540,10 +540,14 @@ static int dw_mipi_dsi2_host_attach(struct mipi_dsi_host *host,
540540
if (pdata->host_ops && pdata->host_ops->attach) {
541541
ret = pdata->host_ops->attach(pdata->priv_data, device);
542542
if (ret < 0)
543-
return ret;
543+
goto err_remove_bridge;
544544
}
545545

546546
return 0;
547+
548+
err_remove_bridge:
549+
drm_bridge_remove(&dsi2->bridge);
550+
return ret;
547551
}
548552

549553
static int dw_mipi_dsi2_host_detach(struct mipi_dsi_host *host,

0 commit comments

Comments
 (0)