tools: zynqmpimage: Check return values from file functions
authorMichal Simek <michal.simek@xilinx.com>
Tue, 5 Dec 2017 14:42:25 +0000 (15:42 +0100)
committerMichal Simek <michal.simek@xilinx.com>
Mon, 18 Dec 2017 08:32:06 +0000 (09:32 +0100)
Check all return values from file functions.
In case of negative return exit immediately.
Also change fsize return value which can't be negative.

Reported-by: Coverity (CID: 23276, 23304, 169357)
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
tools/zynqmpimage.c

index 9667b11b2f8a5a235c352255b57aeee37b570718..f48ac6dbe5056de5b36a1c99695908bfdeeadb41 100644 (file)
@@ -245,16 +245,38 @@ static int zynqmpimage_check_image_types(uint8_t type)
        return EXIT_FAILURE;
 }
 
-static int fsize(FILE *fp)
+static uint32_t fsize(FILE *fp)
 {
-       int size;
-       int origin = ftell(fp);
+       int size, ret, origin;
+
+       origin = ftell(fp);
+       if (origin < 0) {
+               fprintf(stderr, "Incorrect file size\n");
+               fclose(fp);
+               exit(2);
+       }
+
+       ret = fseek(fp, 0L, SEEK_END);
+       if (ret) {
+               fprintf(stderr, "Incorrect file SEEK_END\n");
+               fclose(fp);
+               exit(3);
+       }
 
-       fseek(fp, 0L, SEEK_END);
        size = ftell(fp);
+       if (size < 0) {
+               fprintf(stderr, "Incorrect file size\n");
+               fclose(fp);
+               exit(4);
+       }
 
        /* going back */
-       fseek(fp, origin, SEEK_SET);
+       ret = fseek(fp, origin, SEEK_SET);
+       if (ret) {
+               fprintf(stderr, "Incorrect file SEEK_SET to %d\n", origin);
+               fclose(fp);
+               exit(3);
+       }
 
        return size;
 }