summaryrefslogtreecommitdiff
path: root/drivers/interconnect
diff options
context:
space:
mode:
authorGabor Juhos <j4g8y7@gmail.com>2025-06-25 19:32:35 +0200
committerGeorgi Djakov <djakov@kernel.org>2025-06-26 19:18:01 +0300
commit618c810a7b2163517ab1875bd56b633ca3cb3328 (patch)
tree7d5aa457ac5a23b57efb9d02836b80c19d0d93b3 /drivers/interconnect
parent1809db75bd1fa71e27e199e4c5cc9072741f6052 (diff)
downloadlinux-618c810a7b2163517ab1875bd56b633ca3cb3328.tar.gz
linux-618c810a7b2163517ab1875bd56b633ca3cb3328.tar.bz2
linux-618c810a7b2163517ab1875bd56b633ca3cb3328.zip
interconnect: icc-clk: destroy nodes in case of memory allocation failures
When memory allocation fails during creating the name of the nodes in icc_clk_register(), the code continues on the error path and it calls icc_nodes_remove() to destroy the already created nodes. However that function only destroys the nodes which were already added to the provider and the newly created nodes are never destroyed in case of error. In order to avoid a memory leaks, change the code to destroy the newly created nodes explicitly in case of memory allocation failures. Fixes: 44c5aa73ccd1 ("interconnect: icc-clk: check return values of devm_kasprintf()") Signed-off-by: Gabor Juhos <j4g8y7@gmail.com> Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org> Link: https://lore.kernel.org/r/20250625-icc-clk-memleak-fix-v1-1-4151484cd24f@gmail.com Signed-off-by: Georgi Djakov <djakov@kernel.org>
Diffstat (limited to 'drivers/interconnect')
-rw-r--r--drivers/interconnect/icc-clk.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/interconnect/icc-clk.c b/drivers/interconnect/icc-clk.c
index 88f311c11020..93c030608d3e 100644
--- a/drivers/interconnect/icc-clk.c
+++ b/drivers/interconnect/icc-clk.c
@@ -117,6 +117,7 @@ struct icc_provider *icc_clk_register(struct device *dev,
node->name = devm_kasprintf(dev, GFP_KERNEL, "%s_master", data[i].name);
if (!node->name) {
+ icc_node_destroy(node->id);
ret = -ENOMEM;
goto err;
}
@@ -135,6 +136,7 @@ struct icc_provider *icc_clk_register(struct device *dev,
node->name = devm_kasprintf(dev, GFP_KERNEL, "%s_slave", data[i].name);
if (!node->name) {
+ icc_node_destroy(node->id);
ret = -ENOMEM;
goto err;
}