From: Alan Modra Date: Wed, 15 Apr 2020 07:08:01 +0000 (+0930) Subject: PR25822, Invalid read in process_symbol_table X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=001890e1f9269697f7e0212430a51479271bdab2;p=binutils-gdb.git 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 --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) {