[PATCH] kexec/kexec.c: Add missing fclose()/close() call
Khalid Aziz and Shuah Khan
azizkhan at gonehiking.org
Tue Aug 25 10:50:50 EDT 2020
As Eric pointed out, not all of these make sense. I have flagged the
ones that makes sense below.
On 8/25/20 2:14 AM, Youling Tang wrote:
> Add missing fclose()/close() call.
>
> Signed-off-by: Youling Tang <tangyouling at loongson.cn>
> ---
> kexec/kexec.c | 28 ++++++++++++++++++++++------
> 1 file changed, 22 insertions(+), 6 deletions(-)
>
> diff --git a/kexec/kexec.c b/kexec/kexec.c
> index a62b362..f970b13 100644
> --- a/kexec/kexec.c
> +++ b/kexec/kexec.c
> @@ -542,6 +542,7 @@ static char *slurp_file_generic(const char *filename, off_t *r_size,
> }
> result = fstat(fd, &stats);
> if (result < 0) {
> + close(fd);
> die("Cannot stat: %s: %s\n",
> filename, strerror(errno));
> }
> @@ -553,20 +554,26 @@ static char *slurp_file_generic(const char *filename, off_t *r_size,
> if (S_ISCHR(stats.st_mode)) {
>
> size = lseek(fd, 0, SEEK_END);
> - if (size < 0)
> + if (size < 0) {
> + close(fd);
> die("Can not seek file %s: %s\n", filename,
> strerror(errno));
> + }
>
> err = lseek(fd, 0, SEEK_SET);
> - if (err < 0)
> + if (err < 0) {
> + close(fd);
> die("Can not seek to the begin of file %s: %s\n",
> filename, strerror(errno));
> + }
> buf = slurp_fd(fd, filename, size, &nread);
> } else if (S_ISBLK(stats.st_mode)) {
> err = ioctl(fd, BLKGETSIZE64, &size);
> - if (err < 0)
> + if (err < 0) {
> + close(fd);
> die("Can't retrieve size of block device %s: %s\n",
> filename, strerror(errno));
> + }
> buf = slurp_fd(fd, filename, size, &nread);
> } else {
> size = stats.st_size;
> @@ -578,13 +585,18 @@ static char *slurp_file_generic(const char *filename, off_t *r_size,
> buf = slurp_fd(fd, filename, size, &nread);
> }
> }
> - if ((use_mmap && (buf == MAP_FAILED)) || (!use_mmap && (buf == NULL)))
> + if ((use_mmap && (buf == MAP_FAILED)) || (!use_mmap && (buf == NULL))) {
> + close(fd);
> die("Cannot read %s", filename);
> + }
>
> - if (nread != size)
> + if (nread != size) {
> + close(fd);
> die("Read on %s ended before stat said it should\n", filename);
> + }
Above changes do not serve any purpose.
>
> *r_size = size;
> + close(fd);
> return buf;
> }
>
This one is good.
> @@ -1131,8 +1143,10 @@ char *get_command_line(void)
> if (!fp)
> die("Could not open /proc/cmdline.");
>
> - if (fgets(line, sizeof_line, fp) == NULL)
> + if (fgets(line, sizeof_line, fp) == NULL) {
> + fclose(fp);
> die("Can't read /proc/cmdline.");
> + }
>
> fclose(fp);
>
This is unnecessary.
> @@ -1257,12 +1271,14 @@ static int do_kexec_file_load(int fileind, int argc, char **argv,
> if (i == file_types) {
> fprintf(stderr, "Cannot determine the file type " "of %s\n",
> kernel);
> + close(kernel_fd);
> return EFAILED;
> }
>
> ret = file_type[i].load(argc, argv, kernel_buf, kernel_size, &info);
> if (ret < 0) {
> fprintf(stderr, "Cannot load %s\n", kernel);
> + close(kernel_fd);
> return ret;
> }
>
>
These are good.
--
Khalid
More information about the kexec
mailing list