diff options
| author | Shiji Yang | 2026-03-06 00:36:01 +0000 |
|---|---|---|
| committer | Hauke Mehrtens | 2026-04-02 21:23:40 +0000 |
| commit | 39f757752458dffb04de36d76835a26fe17cc7bb (patch) | |
| tree | 0f438894844b8030439b1c0e8f00ca9151e94c19 | |
| parent | b6a8b8a946191db97fe7e0be1eec4f8d4ea530a4 (diff) | |
| download | openwrt-39f757752458dffb04de36d76835a26fe17cc7bb.tar.gz | |
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>
(cherry picked from commit 4778e35464d4ae38f2dc508be5caf3861e1799b3)
Link: https://github.com/openwrt/openwrt/pull/22699
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
| -rw-r--r-- | target/linux/lantiq/patches-6.12/101-find_active_root.patch | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/target/linux/lantiq/patches-6.12/101-find_active_root.patch b/target/linux/lantiq/patches-6.12/101-find_active_root.patch index 99e187a012..b5fefbae09 100644 --- a/target/linux/lantiq/patches-6.12/101-find_active_root.patch +++ b/target/linux/lantiq/patches-6.12/101-find_active_root.patch @@ -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; +@@ -98,6 +132,14 @@ static int parse_fixed_partitions(struct + if (!parts) + return -ENOMEM; - parts = kcalloc(nr_parts, sizeof(*parts), GFP_KERNEL); -- if (!parts) + part_nodes = kcalloc(nr_parts, sizeof(*part_nodes), GFP_KERNEL); ++ if (!part_nodes) { ++ if (dedicated) ++ of_node_put(ofpart_node); ++ kfree(parts); ++ return -ENOMEM; ++ } + -+ if (!parts || !part_nodes) - 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); |