drivers/of: Fix depth when unflattening devicetree
[cascardo/linux.git] / drivers / of / fdt.c
index ef1ccee..b352f67 100644 (file)
@@ -407,24 +407,24 @@ static int unflatten_dt_nodes(const void *blob,
 
        root = dad;
        fpsizes[depth] = dad ? strlen(of_node_full_name(dad)) : 0;
-       nps[depth++] = dad;
+       nps[depth] = dad;
        for (offset = 0;
-            offset >= 0;
+            offset >= 0 && depth >= 0;
             offset = fdt_next_node(blob, offset, &depth)) {
                if (WARN_ON_ONCE(depth >= FDT_MAX_DEPTH))
                        continue;
 
-               fpsizes[depth] = populate_node(blob, offset, &mem,
-                                              nps[depth - 1],
-                                              fpsizes[depth - 1],
-                                              &nps[depth], dryrun);
-               if (!fpsizes[depth])
+               fpsizes[depth+1] = populate_node(blob, offset, &mem,
+                                                nps[depth],
+                                                fpsizes[depth],
+                                                &nps[depth+1], dryrun);
+               if (!fpsizes[depth+1])
                        return mem - base;
 
                if (!dryrun && nodepp && !*nodepp)
-                       *nodepp = nps[depth];
+                       *nodepp = nps[depth+1];
                if (!dryrun && !root)
-                       root = nps[depth];
+                       root = nps[depth+1];
        }
 
        if (offset < 0 && offset != -FDT_ERR_NOTFOUND) {