for_each_child_of_node() returns each child node with its reference
count incremented, so breaking out of the loop early requires
dropping the reference on the current node. In logicvc_layers_init(),
when logicvc_layer_init() fails, the error path releases the parent
"layers" node but not the child node 'layer_node' that the loop is
currently holding, leaking its reference. The leak has been present
since the driver was introduced.

Release 'layer_node' before jumping to the error label.

Fixes: efeeaefe9be5 ("drm: Add support for the LogiCVC display controller")
Signed-off-by: Jason Xiang <[email protected]>
---
 drivers/gpu/drm/logicvc/logicvc_layer.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/gpu/drm/logicvc/logicvc_layer.c 
b/drivers/gpu/drm/logicvc/logicvc_layer.c
index 7f5ba000188a..e83a2aafed77 100644
--- a/drivers/gpu/drm/logicvc/logicvc_layer.c
+++ b/drivers/gpu/drm/logicvc/logicvc_layer.c
@@ -613,6 +613,7 @@ int logicvc_layers_init(struct logicvc_drm *logicvc)
 
                ret = logicvc_layer_init(logicvc, layer_node, index);
                if (ret) {
+                       of_node_put(layer_node);
                        of_node_put(layers_node);
                        goto error;
                }

base-commit: f0e6f20cb52b14c2c441f04e21cef0c95d498cac
-- 
2.50.1

Reply via email to