The error handling code does not current detect an error right away.
Adjust it to return immediately.

Signed-off-by: Simon Glass <s...@chromium.org>
---

Changes in v2: None

 lib/of_live.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/lib/of_live.c b/lib/of_live.c
index 51927f9e91..f351483387 100644
--- a/lib/of_live.c
+++ b/lib/of_live.c
@@ -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);
-- 
2.13.0.506.g27d5fe0cd-goog

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to