X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=tools%2Ffdtgrep.c;h=8f44f599c1c437525b9bfe9cb405ce6e9838a257;hb=760b7170c5e44c771397eaf57b7197b621373809;hp=f51f5f15f5497e063158d81efa34c8bbd11eaa2a;hpb=235c5b8315c6a9eb566fd3d99a098cc6db869fc5;p=u-boot diff --git a/tools/fdtgrep.c b/tools/fdtgrep.c index f51f5f15f5..8f44f599c1 100644 --- a/tools/fdtgrep.c +++ b/tools/fdtgrep.c @@ -1,23 +1,25 @@ +// SPDX-License-Identifier: GPL-2.0+ /* * Copyright (c) 2013, Google Inc. * Written by Simon Glass * - * SPDX-License-Identifier: GPL-2.0+ - * * Perform a grep of an FDT either displaying the source subset or producing * a new .dtb subset which can be used as required. */ #include #include +#include #include +#include +#include #include #include #include #include -#include <../include/libfdt.h> -#include +#include "fdt_host.h" +#include "libfdt_internal.h" /* Define DEBUG to get some debugging output on stderr */ #ifdef DEBUG @@ -131,11 +133,11 @@ static int value_add(struct display_info *disp, struct value_node **headp, } str = strdup(str); + if (!str) + goto err_mem; node = malloc(sizeof(*node)); - if (!str || !node) { - fprintf(stderr, "Out of memory\n"); - return -1; - } + if (!node) + goto err_mem; node->next = *headp; node->type = type; node->include = include; @@ -143,6 +145,9 @@ static int value_add(struct display_info *disp, struct value_node **headp, *headp = node; return 0; +err_mem: + fprintf(stderr, "Out of memory\n"); + return -1; } static bool util_is_printable_string(const void *data, int len) @@ -771,7 +776,7 @@ char *utilfdt_read(const char *filename) */ static int do_fdtgrep(struct display_info *disp, const char *filename) { - struct fdt_region *region; + struct fdt_region *region = NULL; int max_regions; int count = 100; char path[1024]; @@ -799,7 +804,7 @@ static int do_fdtgrep(struct display_info *disp, const char *filename) * The first pass will count the regions, but if it is too many, * we do another pass to actually record them. */ - for (i = 0; i < 3; i++) { + for (i = 0; i < 2; i++) { region = malloc(count * sizeof(struct fdt_region)); if (!region) { fprintf(stderr, "Out of memory for %d regions\n", @@ -813,11 +818,14 @@ static int do_fdtgrep(struct display_info *disp, const char *filename) disp->flags); if (count < 0) { report_error("fdt_find_regions", count); + free(region); return -1; } if (count <= max_regions) break; free(region); + fprintf(stderr, "Internal error with fdtgrep_find_region)(\n"); + return -1; } /* Optionally print a list of regions */