firmware-utils: uimage_padhdr: fix Coverity issue
authorPetr Štetiar <ynezz@true.cz>
Wed, 31 Jul 2019 12:07:11 +0000 (14:07 +0200)
committerPetr Štetiar <ynezz@true.cz>
Sun, 4 Aug 2019 20:09:20 +0000 (22:09 +0200)
Fixes following issue reported by Coverity scan:

 *** CID 1452085:  Security best practices violations  (TOCTOU)
 /tools/firmware-utils/src/uimage_padhdr.c: 100 in main()
 94
 95      if (!infname || !outfname) {
 96      usage(argv[0]);
 97      exit(1);
 98      }
 99
 >>>     CID 1452085:  Security best practices violations  (TOCTOU)
 >>>     Calling function "stat" to perform check on "infname".
 100      if (stat(infname, &statbuf) < 0) {

Fixes: a1c6a316d299 ("ramips: add support for Fon FON2601")
Signed-off-by: Petr Štetiar <ynezz@true.cz>
tools/firmware-utils/src/uimage_padhdr.c

index b5fb97d..d1a1efb 100644 (file)
@@ -97,18 +97,6 @@ int main(int argc, char *argv[])
                exit(1);
        }
 
-       if (stat(infname, &statbuf) < 0) {
-               fprintf(stderr,
-                       "could not find input file. (errno = %d)\n", errno);
-               exit(1);
-       }
-
-       filebuf = malloc(statbuf.st_size + padsz);
-       if (!filebuf) {
-               fprintf(stderr, "buffer allocation failed\n");
-               exit(1);
-       }
-
        ifd = open(infname, O_RDONLY);
        if (ifd < 0) {
                fprintf(stderr,
@@ -123,6 +111,18 @@ int main(int argc, char *argv[])
                exit(1);
        }
 
+       if (fstat(ifd, &statbuf) < 0) {
+               fprintf(stderr,
+                       "could not fstat input file. (errno = %d)\n", errno);
+               exit(1);
+       }
+
+       filebuf = malloc(statbuf.st_size + padsz);
+       if (!filebuf) {
+               fprintf(stderr, "buffer allocation failed\n");
+               exit(1);
+       }
+
        rsz = read(ifd, filebuf, sizeof(*imgh));
        if (rsz != sizeof(*imgh)) {
                fprintf(stderr,