diff mbox series

[U-Boot] regmap: Fix potential memory leaks

Message ID 20191111095905.4068-1-faiz_abbas@ti.com
State Accepted
Commit 42a4ee8a11bb230c81f27c14886cc2ee7ddf2c72
Delegated to: Tom Rini
Headers show
Series [U-Boot] regmap: Fix potential memory leaks | expand

Commit Message

Faiz Abbas Nov. 11, 2019, 9:59 a.m. UTC
Free allocated memory in case of an error in regmap_init_mem() and
regmap_init_mem_index().

Signed-off-by: Faiz Abbas <faiz_abbas@ti.com>
---
 drivers/core/regmap.c | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

Comments

Tom Rini Dec. 4, 2019, 4:01 a.m. UTC | #1
On Mon, Nov 11, 2019 at 03:29:05PM +0530, Faiz Abbas wrote:

> Free allocated memory in case of an error in regmap_init_mem() and
> regmap_init_mem_index().
> 
> Signed-off-by: Faiz Abbas <faiz_abbas@ti.com>

Applied to u-boot/master, thanks!
diff mbox series

Patch

diff --git a/drivers/core/regmap.c b/drivers/core/regmap.c
index e9e55c9d16..a974744a61 100644
--- a/drivers/core/regmap.c
+++ b/drivers/core/regmap.c
@@ -134,7 +134,7 @@  int regmap_init_mem_index(ofnode node, struct regmap **mapp, int index)
 
 	ret = init_range(node, map->ranges, addr_len, size_len, index);
 	if (ret)
-		return ret;
+		goto err;
 
 	if (ofnode_read_bool(node, "little-endian"))
 		map->endianness = REGMAP_LITTLE_ENDIAN;
@@ -147,6 +147,10 @@  int regmap_init_mem_index(ofnode node, struct regmap **mapp, int index)
 
 	*mapp = map;
 
+	return 0;
+err:
+	regmap_uninit(map);
+
 	return ret;
 }
 
@@ -158,6 +162,7 @@  int regmap_init_mem(ofnode node, struct regmap **mapp)
 	int addr_len, size_len, both_len;
 	int len;
 	int index;
+	int ret;
 
 	addr_len = ofnode_read_simple_addr_cells(ofnode_get_parent(node));
 	if (addr_len < 0) {
@@ -200,10 +205,9 @@  int regmap_init_mem(ofnode node, struct regmap **mapp)
 
 	for (range = map->ranges, index = 0; count > 0;
 	     count--, range++, index++) {
-		int ret = init_range(node, range, addr_len, size_len, index);
-
+		ret = init_range(node, range, addr_len, size_len, index);
 		if (ret)
-			return ret;
+			goto err;
 	}
 
 	if (ofnode_read_bool(node, "little-endian"))
@@ -218,6 +222,10 @@  int regmap_init_mem(ofnode node, struct regmap **mapp)
 	*mapp = map;
 
 	return 0;
+err:
+	regmap_uninit(map);
+
+	return ret;
 }
 #endif