From 001890e1f9269697f7e0212430a51479271bdab2 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Wed, 15 Apr 2020 16:38:01 +0930 Subject: [PATCH] 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. --- 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 + + 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 * 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) { -- 2.39.2