tools: fdtgrep: Fix handle leak
authorMikhail Ilin <ilin.mikhail.ol@gmail.com>
Wed, 23 Nov 2022 11:31:03 +0000 (14:31 +0300)
committerTom Rini <trini@konsulko.com>
Thu, 8 Dec 2022 14:29:02 +0000 (09:29 -0500)
The handle "fd" was created in fdtgrep.c:708 by calling the
 "open" function and is lost in fdtgrep.c:716 and fdtgrep.c:723.
 Close file descriptor 'fd' before exiting with an error from function
 utilfdt_read_err_len(const char *filename, char **buffp, off_t *len).

Fixes: 1043d0a0296a ("fdt: Add fdtgrep tool")
Signed-off-by: Mikhail Ilin <ilin.mikhail.ol@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
tools/fdtgrep.c

index 641d6a2..7eabcab 100644 (file)
@@ -712,15 +712,19 @@ int utilfdt_read_err_len(const char *filename, char **buffp, off_t *len)
 
        /* Loop until we have read everything */
        buf = malloc(bufsize);
-       if (!buf)
+       if (!buf) {
+               close(fd);
                return -ENOMEM;
+       }
        do {
                /* Expand the buffer to hold the next chunk */
                if (offset == bufsize) {
                        bufsize *= 2;
                        buf = realloc(buf, bufsize);
-                       if (!buf)
+                       if (!buf) {
+                               close(fd);
                                return -ENOMEM;
+                       }
                }
 
                ret = read(fd, &buf[offset], bufsize - offset);