clk: mvebu: ap-cpu-clk: Fix a memory leak in error handling paths
[ Upstream commitaf9617b419
] If we exit the for_each_of_cpu_node loop early, the reference on the current node must be decremented, otherwise there is a leak. Fixes:f756e362d9
("clk: mvebu: add CPU clock driver for Armada 7K/8K") Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr> Link: https://lore.kernel.org/r/545df946044fc1fc05a4217cdf0054be7a79e49e.1619161112.git.christophe.jaillet@wanadoo.fr Reviewed-by: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: Stephen Boyd <sboyd@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
Родитель
532c483103
Коммит
8525028b46
|
@ -256,12 +256,15 @@ static int ap_cpu_clock_probe(struct platform_device *pdev)
|
|||
int cpu, err;
|
||||
|
||||
err = of_property_read_u32(dn, "reg", &cpu);
|
||||
if (WARN_ON(err))
|
||||
if (WARN_ON(err)) {
|
||||
of_node_put(dn);
|
||||
return err;
|
||||
}
|
||||
|
||||
/* If cpu2 or cpu3 is enabled */
|
||||
if (cpu & APN806_CLUSTER_NUM_MASK) {
|
||||
nclusters = 2;
|
||||
of_node_put(dn);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -288,8 +291,10 @@ static int ap_cpu_clock_probe(struct platform_device *pdev)
|
|||
int cpu, err;
|
||||
|
||||
err = of_property_read_u32(dn, "reg", &cpu);
|
||||
if (WARN_ON(err))
|
||||
if (WARN_ON(err)) {
|
||||
of_node_put(dn);
|
||||
return err;
|
||||
}
|
||||
|
||||
cluster_index = cpu & APN806_CLUSTER_NUM_MASK;
|
||||
cluster_index >>= APN806_CLUSTER_NUM_OFFSET;
|
||||
|
@ -301,6 +306,7 @@ static int ap_cpu_clock_probe(struct platform_device *pdev)
|
|||
parent = of_clk_get(np, cluster_index);
|
||||
if (IS_ERR(parent)) {
|
||||
dev_err(dev, "Could not get the clock parent\n");
|
||||
of_node_put(dn);
|
||||
return -EINVAL;
|
||||
}
|
||||
parent_name = __clk_get_name(parent);
|
||||
|
@ -319,8 +325,10 @@ static int ap_cpu_clock_probe(struct platform_device *pdev)
|
|||
init.parent_names = &parent_name;
|
||||
|
||||
ret = devm_clk_hw_register(dev, &ap_cpu_clk[cluster_index].hw);
|
||||
if (ret)
|
||||
if (ret) {
|
||||
of_node_put(dn);
|
||||
return ret;
|
||||
}
|
||||
ap_cpu_data->hws[cluster_index] = &ap_cpu_clk[cluster_index].hw;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче