Skip to content

Commit dce68a4

Browse files
Aleksandr Mishinmathieupoirier
authored andcommitted
remoteproc: imx_rproc: Fix refcount mistake in imx_rproc_addr_init
In imx_rproc_addr_init() strcmp() is performed over the node after the of_node_put() is performed over it. Fix this error by moving of_node_put() calls. Found by Linux Verification Center (linuxtesting.org) with SVACE. Fixes: 5e4c124 ("remoteproc: imx_rproc: support remote cores booted before Linux Kernel") Cc: [email protected] Signed-off-by: Aleksandr Mishin <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Mathieu Poirier <[email protected]>
1 parent 8d3739d commit dce68a4

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

drivers/remoteproc/imx_rproc.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -734,25 +734,29 @@ static int imx_rproc_addr_init(struct imx_rproc *priv,
734734
continue;
735735
}
736736
err = of_address_to_resource(node, 0, &res);
737-
of_node_put(node);
738737
if (err) {
739738
dev_err(dev, "unable to resolve memory region\n");
739+
of_node_put(node);
740740
return err;
741741
}
742742

743-
if (b >= IMX_RPROC_MEM_MAX)
743+
if (b >= IMX_RPROC_MEM_MAX) {
744+
of_node_put(node);
744745
break;
746+
}
745747

746748
/* Not use resource version, because we might share region */
747749
priv->mem[b].cpu_addr = devm_ioremap_wc(&pdev->dev, res.start, resource_size(&res));
748750
if (!priv->mem[b].cpu_addr) {
749751
dev_err(dev, "failed to remap %pr\n", &res);
752+
of_node_put(node);
750753
return -ENOMEM;
751754
}
752755
priv->mem[b].sys_addr = res.start;
753756
priv->mem[b].size = resource_size(&res);
754757
if (!strcmp(node->name, "rsc-table"))
755758
priv->rsc_table = priv->mem[b].cpu_addr;
759+
of_node_put(node);
756760
b++;
757761
}
758762

0 commit comments

Comments
 (0)