mirror of
https://github.com/openwrt/openwrt.git
synced 2026-06-17 14:50:15 +04:00
lantiq: fix mtdparsers refcount leak and memory leak
Release previously allocated memory and OF node before return. Signed-off-by: Shiji Yang <yangshiji66@outlook.com> Link: https://github.com/openwrt/openwrt/pull/22276 Signed-off-by: Robert Marko <robimarko@gmail.com>
This commit is contained in:
@@ -5,8 +5,8 @@ Subject: [PATCH] find active root
|
||||
|
||||
Signed-off-by: Mathias Kresin <openwrt@kresin.me>
|
||||
---
|
||||
drivers/mtd/parsers/ofpart_core.c | 49 ++++++++++++++++++++++++++++++-
|
||||
1 file changed, 48 insertions(+), 1 deletion(-)
|
||||
drivers/mtd/parsers/ofpart_core.c | 53 +++++++++++++++++++++++++++++++
|
||||
1 file changed, 53 insertions(+)
|
||||
|
||||
--- a/drivers/mtd/parsers/ofpart_core.c
|
||||
+++ b/drivers/mtd/parsers/ofpart_core.c
|
||||
@@ -58,18 +58,22 @@ Signed-off-by: Mathias Kresin <openwrt@kresin.me>
|
||||
|
||||
/* Pull of_node from the master device node */
|
||||
mtd_node = mtd_get_of_node(master);
|
||||
@@ -95,7 +129,9 @@ static int parse_fixed_partitions(struct
|
||||
return 0;
|
||||
|
||||
parts = kcalloc(nr_parts, sizeof(*parts), GFP_KERNEL);
|
||||
- if (!parts)
|
||||
+ part_nodes = kcalloc(nr_parts, sizeof(*part_nodes), GFP_KERNEL);
|
||||
+
|
||||
+ if (!parts || !part_nodes)
|
||||
@@ -98,6 +132,14 @@ static int parse_fixed_partitions(struct
|
||||
if (!parts)
|
||||
return -ENOMEM;
|
||||
|
||||
+ part_nodes = kcalloc(nr_parts, sizeof(*part_nodes), GFP_KERNEL);
|
||||
+ if (!part_nodes) {
|
||||
+ if (dedicated)
|
||||
+ of_node_put(ofpart_node);
|
||||
+ kfree(parts);
|
||||
+ return -ENOMEM;
|
||||
+ }
|
||||
+
|
||||
i = 0;
|
||||
@@ -166,6 +202,11 @@ static int parse_fixed_partitions(struct
|
||||
for_each_child_of_node(ofpart_node, pp) {
|
||||
const __be32 *reg;
|
||||
@@ -166,6 +208,11 @@ static int parse_fixed_partitions(struct
|
||||
if (of_property_read_bool(pp, "slc-mode"))
|
||||
parts[i].add_flags |= MTD_SLC_ON_MLC_EMULATION;
|
||||
|
||||
@@ -81,7 +85,7 @@ Signed-off-by: Mathias Kresin <openwrt@kresin.me>
|
||||
i++;
|
||||
}
|
||||
|
||||
@@ -175,6 +216,11 @@ static int parse_fixed_partitions(struct
|
||||
@@ -175,6 +222,11 @@ static int parse_fixed_partitions(struct
|
||||
if (quirks && quirks->post_parse)
|
||||
quirks->post_parse(master, parts, nr_parts);
|
||||
|
||||
@@ -93,7 +97,7 @@ Signed-off-by: Mathias Kresin <openwrt@kresin.me>
|
||||
*pparts = parts;
|
||||
return nr_parts;
|
||||
|
||||
@@ -185,6 +231,7 @@ ofpart_fail:
|
||||
@@ -185,6 +237,7 @@ ofpart_fail:
|
||||
ofpart_none:
|
||||
of_node_put(pp);
|
||||
kfree(parts);
|
||||
|
||||
Reference in New Issue
Block a user