fdtgrep: Separate out checking of two allocations
authorSimon Glass <sjg@chromium.org>
Tue, 12 Jun 2018 06:04:59 +0000 (00:04 -0600)
committerTom Rini <trini@konsulko.com>
Tue, 19 Jun 2018 11:31:44 +0000 (07:31 -0400)
The current code might succeed on the first allocation and fail on the
second. Separate the checks to avoid this problem.

Of course, free() will never fail and the chances that (when allocating
two small areas) one will succeed and one will fail are just as remote.
But this keeps coverity happy.

Reported-by: Coverity (CID: 131226)
Signed-off-by: Simon Glass <sjg@chromium.org>
tools/fdtgrep.c

index 1f64fc38ff752640a818d1d9f36a9a0f46d17385..8f44f599c1c437525b9bfe9cb405ce6e9838a257 100644 (file)
@@ -133,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;
@@ -145,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)