[binutils-gdb] readelf memory leak in process_mips_specific

Alan Modra amodra@sourceware.org
Tue Mar 24 02:50:25 GMT 2020


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=5a814d6d96bc6426ae1fa8b0d1561ad081deb159

commit 5a814d6d96bc6426ae1fa8b0d1561ad081deb159
Author: Alan Modra <amodra@gmail.com>
Date:   Tue Mar 24 12:12:24 2020 +1030

    readelf memory leak in process_mips_specific
    
            * readelf.c (process_mips_specific): Free iconf on error path.

Diff:
---
 binutils/ChangeLog |  4 ++++
 binutils/readelf.c | 10 ++++++++--
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index bad19ea8b29..11be80dfc30 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,7 @@
+2020-03-24  Alan Modra  <amodra@gmail.com>
+
+	* readelf.c (process_mips_specific): Free iconf on error path.
+
 2020-03-23  Nick Clifton  <nickc@redhat.com>
 
 	PR 25714
diff --git a/binutils/readelf.c b/binutils/readelf.c
index 61f06176835..1f0f49222fd 100644
--- a/binutils/readelf.c
+++ b/binutils/readelf.c
@@ -17074,7 +17074,10 @@ process_mips_specific (Filedata * filedata)
 	    get_data (NULL, filedata, conflicts_offset,
 		      sizeof (*econf32), conflictsno, _("conflict"));
 	  if (!econf32)
-	    return FALSE;
+	    {
+	      free (iconf);
+	      return FALSE;
+	    }
 
 	  for (cnt = 0; cnt < conflictsno; ++cnt)
 	    iconf[cnt] = BYTE_GET (econf32[cnt]);
@@ -17089,7 +17092,10 @@ process_mips_specific (Filedata * filedata)
 	    get_data (NULL, filedata, conflicts_offset,
 		      sizeof (*econf64), conflictsno, _("conflict"));
 	  if (!econf64)
-	    return FALSE;
+	    {
+	      free (iconf);
+	      return FALSE;
+	    }
 
 	  for (cnt = 0; cnt < conflictsno; ++cnt)
 	    iconf[cnt] = BYTE_GET (econf64[cnt]);


More information about the Binutils-cvs mailing list