[PATCH] drm/exynos: dpi: fix panel node reference leak

Wentao Liang vulab at iscas.ac.cn
Tue Nov 3 18:40:57 PST 2026


exynos_dpi_parse_dt() stores a reference to the remote panel node
obtained with of_graph_get_remote_node(). Nothing ever drops it:
exynos_dpi_probe() only needs it to look the panel up with
of_drm_find_panel(), and the two parse error paths return without
releasing it either.

Release the reference once the panel has been looked up, and on the
error paths before returning.

Fixes: 86418f90a4c1 ("drm: convert drivers to use of_graph_get_remote_node")
Cc: stable at vger.kernel.org
Assisted-by: DeepSeek-V4.1-Flash and OpenAI Codex
Signed-off-by: Wentao Liang <vulab at iscas.ac.cn>
---
 drivers/gpu/drm/exynos/exynos_drm_dpi.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_dpi.c b/drivers/gpu/drm/exynos/exynos_drm_dpi.c
index 74d3a2bebb74..b9417529b38e 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_dpi.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_dpi.c
@@ -174,12 +174,15 @@ static int exynos_dpi_parse_dt(struct exynos_dpi *ctx)
 		of_node_put(np);
 
 		vm = devm_kzalloc(dev, sizeof(*ctx->vm), GFP_KERNEL);
-		if (!vm)
+		if (!vm) {
+			of_node_put(ctx->panel_node);
 			return -ENOMEM;
+		}
 
 		ret = of_get_videomode(dn, vm, 0);
 		if (ret < 0) {
 			devm_kfree(dev, vm);
+			of_node_put(ctx->panel_node);
 			return ret;
 		}
 
@@ -241,6 +244,8 @@ struct drm_encoder *exynos_dpi_probe(struct device *dev)
 
 	if (ctx->panel_node) {
 		ctx->panel = of_drm_find_panel(ctx->panel_node);
+		of_node_put(ctx->panel_node);
+		ctx->panel_node = NULL;
 		if (IS_ERR(ctx->panel))
 			return ERR_CAST(ctx->panel);
 	}
-- 
2.34.1




More information about the linux-arm-kernel mailing list