[binutils-gdb] PR25822, Invalid read in process_symbol_table
Alan Modra
amodra@sourceware.org
Wed Apr 15 07:33:54 GMT 2020
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=001890e1f9269697f7e0212430a51479271bdab2
commit 001890e1f9269697f7e0212430a51479271bdab2
Author: Alan Modra <amodra@gmail.com>
Date: Wed Apr 15 16:38:01 2020 +0930
PR25822, Invalid read in process_symbol_table
PR 25822
* readelf.c (get_num_dynamic_syms): Don't set num_of_syms when
reading buckets or chains fails.
Diff:
---
binutils/ChangeLog | 6 ++++++
binutils/readelf.c | 4 +++-
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index a30d38d4aea..9cac7a2a4ef 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,9 @@
+2020-04-15 Alan Modra <amodra@gmail.com>
+
+ PR 25822
+ * readelf.c (get_num_dynamic_syms): Don't set num_of_syms when
+ reading buckets or chains fails.
+
2020-04-15 Alan Modra <amodra@gmail.com>
* readelf.c (process_symbol_table): Zero gnubuckets, gnuchains
diff --git a/binutils/readelf.c b/binutils/readelf.c
index 80af9a242ac..0ea8273ab11 100644
--- a/binutils/readelf.c
+++ b/binutils/readelf.c
@@ -9969,11 +9969,13 @@ get_num_dynamic_syms (Filedata * filedata)
nbuckets = byte_get (nb, hash_ent_size);
nchains = byte_get (nc, hash_ent_size);
- num_of_syms = nchains;
buckets = get_dynamic_data (filedata, nbuckets, hash_ent_size);
chains = get_dynamic_data (filedata, nchains, hash_ent_size);
+ if (buckets != NULL && chains != NULL)
+ num_of_syms = nchains;
+
no_hash:
if (num_of_syms == 0)
{
More information about the Binutils-cvs
mailing list