media: v4l2-core: Fix a potential resource leak in v4l2_fwnode_parse_link()
[platform/kernel/linux-starfive.git] / drivers / media / v4l2-core / v4l2-fwnode.c
index 049c2f2..4fa9225 100644 (file)
@@ -568,19 +568,29 @@ int v4l2_fwnode_parse_link(struct fwnode_handle *fwnode,
        link->local_id = fwep.id;
        link->local_port = fwep.port;
        link->local_node = fwnode_graph_get_port_parent(fwnode);
+       if (!link->local_node)
+               return -ENOLINK;
 
        fwnode = fwnode_graph_get_remote_endpoint(fwnode);
-       if (!fwnode) {
-               fwnode_handle_put(fwnode);
-               return -ENOLINK;
-       }
+       if (!fwnode)
+               goto err_put_local_node;
 
        fwnode_graph_parse_endpoint(fwnode, &fwep);
        link->remote_id = fwep.id;
        link->remote_port = fwep.port;
        link->remote_node = fwnode_graph_get_port_parent(fwnode);
+       if (!link->remote_node)
+               goto err_put_remote_endpoint;
 
        return 0;
+
+err_put_remote_endpoint:
+       fwnode_handle_put(fwnode);
+
+err_put_local_node:
+       fwnode_handle_put(link->local_node);
+
+       return -ENOLINK;
 }
 EXPORT_SYMBOL_GPL(v4l2_fwnode_parse_link);