]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
mtd: parsers: ofpart: call of_node_put() only in ofpart_fail path
authorCosmin Tanislav <cosmin-gabriel.tanislav.xa@renesas.com>
Wed, 11 Mar 2026 15:39:56 +0000 (17:39 +0200)
committerMiquel Raynal <miquel.raynal@bootlin.com>
Mon, 16 Mar 2026 16:37:22 +0000 (17:37 +0100)
ofpart_none can only be reached after the for_each_child_of_node() loop
finishes. for_each_child_of_node() correctly calls of_node_put() for all
device nodes it iterates over as long as we don't break or jump out of
the loop.

Calling of_node_put() inside the ofpart_none path will wrongly decrement
the ref count of the last node in the for_each_child_of_node() loop.

Move the call to of_node_put() under the ofpart_fail label to fix this.

Fixes: ebd5a74db74e ("mtd: ofpart: Check availability of reg property instead of name property")
Signed-off-by: Cosmin Tanislav <cosmin-gabriel.tanislav.xa@renesas.com>
Tested-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
drivers/mtd/parsers/ofpart_core.c

index 0029bda165bde1e20c137bea1f065a93f4faedf4..181ae9616b2e3fc1f92d56bfbc931c8f270fe689 100644 (file)
@@ -195,11 +195,11 @@ static int parse_fixed_partitions(struct mtd_info *master,
 ofpart_fail:
        pr_err("%s: error parsing ofpart partition %pOF (%pOF)\n",
               master->name, pp, mtd_node);
+       of_node_put(pp);
        ret = -EINVAL;
 ofpart_none:
        if (dedicated)
                of_node_put(ofpart_node);
-       of_node_put(pp);
        kfree(parts);
        return ret;
 }