From df16e041deafa1d7fe7d8e65c02213b885c60a8e Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Wed, 22 Jul 2020 16:07:48 +0100 Subject: [PATCH] Fix problems in CTF handling code exposed by the Coverity static analysis tool. readelf * readelf.c (parse_args): Silence potential warnings about a memory resource leak when allocating space for ctf option values. (dump_section_as_ctf): Fix typo checking dump_ctf_strtab_name variable. libctf * ctf-archive.c (ctf_arc_write): Avoid calling close twice on the same file descriptor. --- binutils/ChangeLog | 7 +++++++ binutils/readelf.c | 5 ++++- libctf/ChangeLog | 5 +++++ libctf/ctf-archive.c | 19 ++++++------------- 4 files changed, 22 insertions(+), 14 deletions(-) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index ab59cda43df..7aead1a6609 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,10 @@ +2020-07-22 Nick Clifton + + * readelf.c (parse_args): Silence potential warnings about a + memory resource leak when allocating space for ctf option values. + (dump_section_as_ctf): Fix typo checking dump_ctf_strtab_name + variable. + 2020-07-21 Nick Clifton * po/sv.po: Updated Swedish translation. diff --git a/binutils/readelf.c b/binutils/readelf.c index 2406304fe35..c3cbd2cb235 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -4827,12 +4827,15 @@ parse_args (struct dump_data *dumpdata, int argc, char ** argv) request_dump (dumpdata, CTF_DUMP); break; case OPTION_CTF_SYMBOLS: + free (dump_ctf_symtab_name); dump_ctf_symtab_name = strdup (optarg); break; case OPTION_CTF_STRINGS: + free (dump_ctf_strtab_name); dump_ctf_strtab_name = strdup (optarg); break; case OPTION_CTF_PARENT: + free (dump_ctf_parent_name); dump_ctf_parent_name = strdup (optarg); break; case OPTION_DYN_SYMS: @@ -14296,7 +14299,7 @@ dump_section_as_ctf (Elf_Internal_Shdr * section, Filedata * filedata) symsectp = shdr_to_ctf_sect (&symsect, symtab_sec, filedata); symsect.cts_data = symdata; } - if (dump_ctf_strtab_name && dump_ctf_symtab_name[0] != 0) + if (dump_ctf_strtab_name && dump_ctf_strtab_name[0] != 0) { if ((strtab_sec = find_section (filedata, dump_ctf_strtab_name)) == NULL) { diff --git a/libctf/ChangeLog b/libctf/ChangeLog index bf604421bb2..c061ef80b6e 100644 --- a/libctf/ChangeLog +++ b/libctf/ChangeLog @@ -1,3 +1,8 @@ +2020-07-22 Nick Clifton + + * ctf-archive.c (ctf_arc_write): Avoid calling close twice on the + same file descriptor. + 2020-07-04 Nick Clifton Binutils 2.35 branch created. diff --git a/libctf/ctf-archive.c b/libctf/ctf-archive.c index ac13d6dd5e9..d857c0109c8 100644 --- a/libctf/ctf-archive.c +++ b/libctf/ctf-archive.c @@ -228,23 +228,16 @@ ctf_arc_write (const char *file, ctf_file_t ** ctf_files, size_t ctf_file_cnt, err = ctf_arc_write_fd (fd, ctf_files, ctf_file_cnt, names, threshold); if (err) - goto err; + goto err_close; if ((err = close (fd)) < 0) - { - ctf_dprintf ("ctf_arc_write(): Cannot close after writing to archive: " - "%s\n", strerror (errno)); - goto err_close; - } - - err: - close (fd); - if (err < 0) - unlink (file); - - return err; + ctf_dprintf ("ctf_arc_write(): Cannot close after writing to archive: " + "%s\n", strerror (errno)); + goto err; err_close: + (void) close (fd); + err: if (err < 0) unlink (file); -- 2.30.2