dm: Fix error handling when unflattening the DT
authorSimon Glass <sjg@chromium.org>
Mon, 12 Jun 2017 12:21:34 +0000 (06:21 -0600)
committerSimon Glass <sjg@chromium.org>
Tue, 11 Jul 2017 16:08:20 +0000 (10:08 -0600)
The error handling code does not current detect an error right away.
Adjust it to return immediately.

Signed-off-by: Simon Glass <sjg@chromium.org>
Tested-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
Tested-on: Beaver, Jetson-TK1

lib/of_live.c

index 51927f9e913a9a3164b86c9394cf176ab851f889..f35148338715e7063b4d95c543fb1000778870bb 100644 (file)
@@ -216,9 +216,12 @@ static void *unflatten_dt_node(const void *blob, void *mem, int *poffset,
        *poffset = fdt_next_node(blob, *poffset, &depth);
        if (depth < 0)
                depth = 0;
-       while (*poffset > 0 && depth > old_depth)
+       while (*poffset > 0 && depth > old_depth) {
                mem = unflatten_dt_node(blob, mem, poffset, np, NULL,
                                        fpsize, dryrun);
+               if (!mem)
+                       return NULL;
+       }
 
        if (*poffset < 0 && *poffset != -FDT_ERR_NOTFOUND) {
                debug("unflatten: error %d processing FDT\n", *poffset);
@@ -286,6 +289,8 @@ static int unflatten_device_tree(const void *blob,
        start = 0;
        size = (unsigned long)unflatten_dt_node(blob, NULL, &start, NULL, NULL,
                                                0, true);
+       if (!size)
+               return -EFAULT;
        size = ALIGN(size, 4);
 
        debug("  size is %lx, allocating...\n", size);