optee: fix copy of optee reserved-memory node
authorEtienne Carriere <etienne.carriere@linaro.org>
Fri, 5 Jun 2020 07:22:11 +0000 (09:22 +0200)
committerTom Rini <trini@konsulko.com>
Mon, 15 Jun 2020 15:23:40 +0000 (11:23 -0400)
Fix the loop that parses FDT for a reserved memory node named "optee".

Before this change, if at least one subnode was found in the
reserved-memory node, the function endlessly looped since instruction
continue returned back in the loop without updating variable subnode.
This change fixes the issue by using a for loop.

Fixes: 6ccb05eae01b ("image: fdt: copy possible optee nodes to a loaded devicetree")
Signed-off-by: Etienne Carriere <etienne.carriere@linaro.org>
Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
lib/optee/optee.c

index e59b576..457d4cc 100644 (file)
@@ -156,8 +156,9 @@ int optee_copy_fdt_nodes(const void *old_blob, void *new_blob)
        /* optee inserts its memory regions as reserved-memory nodes */
        nodeoffset = fdt_subnode_offset(old_blob, 0, "reserved-memory");
        if (nodeoffset >= 0) {
-               subnode = fdt_first_subnode(old_blob, nodeoffset);
-               while (subnode >= 0) {
+               for (subnode = fdt_first_subnode(old_blob, nodeoffset);
+                    subnode >= 0;
+                    subnode = fdt_next_subnode(old_blob, subnode)) {
                        const char *name = fdt_get_name(old_blob,
                                                        subnode, NULL);
                        if (!name)
@@ -197,8 +198,6 @@ int optee_copy_fdt_nodes(const void *old_blob, void *new_blob)
                                if (ret < 0)
                                        return ret;
                        }
-
-                       subnode = fdt_next_subnode(old_blob, subnode);
                }
        }