PR25822, Invalid read in process_symbol_table
authorAlan Modra <amodra@gmail.com>
Wed, 15 Apr 2020 07:08:01 +0000 (16:38 +0930)
committerAlan Modra <amodra@gmail.com>
Wed, 15 Apr 2020 07:33:22 +0000 (17:03 +0930)
PR 25822
* readelf.c (get_num_dynamic_syms): Don't set num_of_syms when
reading buckets or chains fails.

binutils/ChangeLog
binutils/readelf.c

index a30d38d4aea0973ff69d4957a836356bd57d4024..9cac7a2a4ef4681c6fa75dd5d5f8c616fd646941 100644 (file)
@@ -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
index 80af9a242acd03c8137a1256f6102c512c75b64e..0ea8273ab113eefac05f42f19bb5579e895a1355 100644 (file)
@@ -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)
        {