]> git.itanic.dy.fi Git - linux-stable/commitdiff
remoteproc: rcar_rproc: Call of_node_put() on iteration error
authorMathieu Poirier <mathieu.poirier@linaro.org>
Mon, 20 Mar 2023 22:18:24 +0000 (16:18 -0600)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 17 May 2023 09:53:46 +0000 (11:53 +0200)
commit f8bae637d3d5e082b4ced71e28b16eb3ee0683c1 upstream.

Function of_phandle_iterator_next() calls of_node_put() on the last
device_node it iterated over, but when the loop exits prematurely it has
to be called explicitly.

Fixes: 285892a74f13 ("remoteproc: Add Renesas rcar driver")
Cc: stable@vger.kernel.org
Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Link: https://lore.kernel.org/r/20230320221826.2728078-4-mathieu.poirier@linaro.org
Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/remoteproc/rcar_rproc.c

index aa86154109c77226abee5fcf14791ce1db3da763..1ff2a73ade90734ae928cff967840f08206bbed3 100644 (file)
@@ -62,13 +62,16 @@ static int rcar_rproc_prepare(struct rproc *rproc)
 
                rmem = of_reserved_mem_lookup(it.node);
                if (!rmem) {
+                       of_node_put(it.node);
                        dev_err(&rproc->dev,
                                "unable to acquire memory-region\n");
                        return -EINVAL;
                }
 
-               if (rmem->base > U32_MAX)
+               if (rmem->base > U32_MAX) {
+                       of_node_put(it.node);
                        return -EINVAL;
+               }
 
                /* No need to translate pa to da, R-Car use same map */
                da = rmem->base;
@@ -79,8 +82,10 @@ static int rcar_rproc_prepare(struct rproc *rproc)
                                           rcar_rproc_mem_release,
                                           it.node->name);
 
-               if (!mem)
+               if (!mem) {
+                       of_node_put(it.node);
                        return -ENOMEM;
+               }
 
                rproc_add_carveout(rproc, mem);
        }