ili9881c_dsi_probe() registers the panel with drm_panel_add() before attaching the DSI device. If mipi_dsi_attach() fails, probe returns the error without removing the panel registration. Since the remove callback is not called after a failed probe, the panel remains registered and keeps an additional reference after the devm-managed allocation is released, leaking the panel registration and its reference. Use devm_drm_panel_add() so that the panel registration is automatically removed both on probe failure and on driver teardown. Remove the now redundant drm_panel_remove() from the remove callback. This issue was found by manual code inspection. Fixes: 26aec25593c2 ("drm/panel: Add Ilitek ILI9881c panel driver") Cc: stable@vger.kernel.org Signed-off-by: Guangshuo Li --- drivers/gpu/drm/panel/panel-ilitek-ili9881c.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c b/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c index c3d5ab67121d..1a52f92e2963 100644 --- a/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c +++ b/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c @@ -2594,7 +2594,9 @@ static int ili9881c_dsi_probe(struct mipi_dsi_device *dsi) if (ret) return ret; - drm_panel_add(&ctx->panel); + ret = devm_drm_panel_add(&dsi->dev, &ctx->panel); + if (ret) + return dev_err_probe(&dsi->dev, ret, "Failed to add panel\n") dsi->mode_flags = ctx->desc->mode_flags; dsi->format = MIPI_DSI_FMT_RGB888; @@ -2605,10 +2607,7 @@ static int ili9881c_dsi_probe(struct mipi_dsi_device *dsi) static void ili9881c_dsi_remove(struct mipi_dsi_device *dsi) { - struct ili9881c *ctx = mipi_dsi_get_drvdata(dsi); - mipi_dsi_detach(dsi); - drm_panel_remove(&ctx->panel); } static const struct ili9881c_desc lhr050h41_desc = { -- 2.43.0