firmware-utils/mkchkimg: fix possible resource leaks

Add missing `fclose` calls for file pointers `kern_fp`, `fs_fp`
and `out_fp`.
Not closing files could lead to resource leaks.

Signed-off-by: Andrea Dalla Costa <andrea@dallacosta.me>
This commit is contained in:
Andrea Dalla Costa 2020-01-11 23:10:51 +01:00 committed by Jo-Philipp Wich
parent 0ae0f48cec
commit 8e3b3152e5

View File

@ -231,6 +231,7 @@ main (int argc, char * argv[])
if (fs_file) { if (fs_file) {
fs_fp = fopen (fs_file, "r"); fs_fp = fopen (fs_file, "r");
if (!fs_fp) { if (!fs_fp) {
fclose(kern_fp);
fatal_error (errno, "Cannot open %s", fs_file); fatal_error (errno, "Cannot open %s", fs_file);
} }
} }
@ -238,6 +239,10 @@ main (int argc, char * argv[])
/* Open the output file */ /* Open the output file */
out_fp = fopen (output_file, "w+"); out_fp = fopen (output_file, "w+");
if (!out_fp) { if (!out_fp) {
fclose(kern_fp);
if (fs_fp) {
fclose(fs_fp);
}
fatal_error (errno, "Cannot open %s", output_file); fatal_error (errno, "Cannot open %s", output_file);
} }
@ -285,6 +290,7 @@ main (int argc, char * argv[])
netgear_checksum_add (&chk_part, (unsigned char *)buf, len); netgear_checksum_add (&chk_part, (unsigned char *)buf, len);
netgear_checksum_add (&chk_whole, (unsigned char *)buf, len); netgear_checksum_add (&chk_whole, (unsigned char *)buf, len);
} }
fclose(kern_fp);
hdr->kernel_chksum = netgear_checksum_fini (&chk_part); hdr->kernel_chksum = netgear_checksum_fini (&chk_part);
message (" Kernel Len: %u", hdr->kernel_len); message (" Kernel Len: %u", hdr->kernel_len);
message ("Kernel Checksum: 0x%08x", hdr->kernel_chksum); message ("Kernel Checksum: 0x%08x", hdr->kernel_chksum);
@ -306,6 +312,7 @@ main (int argc, char * argv[])
netgear_checksum_add (&chk_part, (unsigned char *)buf, len); netgear_checksum_add (&chk_part, (unsigned char *)buf, len);
netgear_checksum_add (&chk_whole, (unsigned char *)buf, len); netgear_checksum_add (&chk_whole, (unsigned char *)buf, len);
} }
fclose(fs_fp);
hdr->rootfs_chksum = (netgear_checksum_fini (&chk_part)); hdr->rootfs_chksum = (netgear_checksum_fini (&chk_part));
message (" Rootfs Len: %u", hdr->rootfs_len); message (" Rootfs Len: %u", hdr->rootfs_len);
message ("Rootfs Checksum: 0x%08x", hdr->rootfs_chksum); message ("Rootfs Checksum: 0x%08x", hdr->rootfs_chksum);
@ -336,6 +343,7 @@ main (int argc, char * argv[])
} }
/* Success */ /* Success */
fclose(out_fp);
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }