[PATCH] firmware: ti_sci: Fix memory leaks in

Francois Berder fberder at outlook.fr
Mon Nov 3 20:33:06 CET 2025


  - Fix temp memory leak
  - Free memory during error handling

Signed-off-by: Francois Berder <fberder at outlook.fr>
---
 drivers/firmware/ti_sci.c | 36 +++++++++++++++++++++++++++++++++---
 1 file changed, 33 insertions(+), 3 deletions(-)

diff --git a/drivers/firmware/ti_sci.c b/drivers/firmware/ti_sci.c
index 8013afef304..2b62c99e79c 100644
--- a/drivers/firmware/ti_sci.c
+++ b/drivers/firmware/ti_sci.c
@@ -3081,20 +3081,32 @@ devm_ti_sci_get_of_resource(const struct ti_sci_handle *handle,
 	sets = dev_read_size(dev, of_prop);
 	if (sets < 0) {
 		dev_err(dev, "%s resource type ids not available\n", of_prop);
+		devm_kfree(dev, res);
 		return ERR_PTR(sets);
 	}
 	temp = malloc(sets);
+	if (!temp) {
+		devm_kfree(dev, res);
+		return ERR_PTR(-ENOMEM);
+	}
 	sets /= sizeof(u32);
 	res->sets = sets;
 
 	res->desc = devm_kcalloc(dev, res->sets, sizeof(*res->desc),
 				 GFP_KERNEL);
-	if (!res->desc)
+	if (!res->desc) {
+		free(temp);
+		devm_kfree(dev, res);
 		return ERR_PTR(-ENOMEM);
+	}
 
 	ret = dev_read_u32_array(dev, of_prop, temp, res->sets);
-	if (ret)
+	if (ret) {
+		free(temp);
+		devm_kfree(dev, res->desc);
+		devm_kfree(dev, res);
 		return ERR_PTR(-EINVAL);
+	}
 
 	for (i = 0; i < res->sets; i++) {
 		resource_subtype = temp[i];
@@ -3119,13 +3131,31 @@ devm_ti_sci_get_of_resource(const struct ti_sci_handle *handle,
 		res->desc[i].res_map =
 			devm_kzalloc(dev, BITS_TO_LONGS(res->desc[i].num) *
 				     sizeof(*res->desc[i].res_map), GFP_KERNEL);
-		if (!res->desc[i].res_map)
+		if (!res->desc[i].res_map) {
+			int j;
+
+			free(temp);
+
+			for (j = 0; j < i; j++)
+				devm_kfree(dev, res->desc[j].res_map);
+
+			devm_kfree(dev, res->desc);
+			devm_kfree(dev, res);
 			return ERR_PTR(-ENOMEM);
+		}
 	}
 
+	free(temp);
+
 	if (valid_set)
 		return res;
 
+	for (i = 0; i < res->sets; i++)
+		devm_kfree(dev, res->desc[i].res_map);
+
+	devm_kfree(dev, res->desc);
+	devm_kfree(dev, res);
+
 	return ERR_PTR(-EINVAL);
 }
 
-- 
2.43.0



More information about the U-Boot mailing list