[binutils-gdb] readelf: segfault at readelf.c:12227
Alan Modra
amodra@sourceware.org
Mon Apr 20 01:40:17 GMT 2020
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=a5e0be5cb29bcbcfee6f1ead2daed9889a2a6ac6
commit a5e0be5cb29bcbcfee6f1ead2daed9889a2a6ac6
Author: Alan Modra <amodra@gmail.com>
Date: Mon Apr 20 11:01:47 2020 +0930
readelf: segfault at readelf.c:12227
This is another one where not cleaning up sufficiently after
processing one file can lead to errors when processing the next file.
We have ngnuchains non-zero but gnuchains NULL in the following:
off < ngnuchains && (gnuchains[off] & 1) == 0
* readelf.c (process_symbol_table): Clear ngnuchains, ngnubuckets
and nbuckets.
Diff:
---
binutils/ChangeLog | 5 +++++
binutils/readelf.c | 6 ++++++
2 files changed, 11 insertions(+)
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 86eb5781400..6280eb7c37a 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,8 @@
+2020-04-20 Alan Modra <amodra@gmail.com>
+
+ * readelf.c (process_symbol_table): Clear ngnuchains, ngnubuckets
+ and nbuckets.
+
2020-04-20 Alan Modra <amodra@gmail.com>
* readelf.c (process_section_headers): Free dynamic symbols etc.
diff --git a/binutils/readelf.c b/binutils/readelf.c
index d9c9b7ea0c1..ea30f883c59 100644
--- a/binutils/readelf.c
+++ b/binutils/readelf.c
@@ -12188,6 +12188,7 @@ process_symbol_table (Filedata * filedata)
free (buckets);
buckets = NULL;
+ nbuckets = 0;
free (chains);
chains = NULL;
@@ -12263,8 +12264,10 @@ process_symbol_table (Filedata * filedata)
}
free (gnubuckets);
gnubuckets = NULL;
+ ngnubuckets = 0;
free (gnuchains);
gnuchains = NULL;
+ ngnuchains = 0;
free (mipsxlat);
mipsxlat = NULL;
return TRUE;
@@ -12272,12 +12275,15 @@ process_symbol_table (Filedata * filedata)
err_out:
free (gnubuckets);
gnubuckets = NULL;
+ ngnubuckets = 0;
free (gnuchains);
gnuchains = NULL;
+ ngnuchains = 0
free (mipsxlat);
mipsxlat = NULL;
free (buckets);
buckets = NULL;
+ nbuckets = 0;
free (chains);
chains = NULL;
return FALSE;
More information about the Binutils-cvs
mailing list