Don't crash in trace mode when dependencies are missing
authorAndreas Schwab <schwab@redhat.com>
Thu, 15 Apr 2010 05:16:06 +0000 (22:16 -0700)
committerUlrich Drepper <drepper@redhat.com>
Thu, 15 Apr 2010 05:16:06 +0000 (22:16 -0700)
ChangeLog
elf/dl-version.c

index 0196c24..9b23fd9 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2010-04-14  Andreas Schwab  <schwab@redhat.com>
+
+       * elf/dl-version.c (_dl_check_map_versions): Avoid index overflow
+       when dependencies are missing.
+
 2010-04-14  H.J. Lu  <hongjiu.lu@intel.com>
 
        * sysdeps/x86_64/multiarch/memcmp-sse4.S: Optimized for unaligned
index 9e88116..c59a6c3 100644 (file)
@@ -322,10 +322,14 @@ _dl_check_map_versions (struct link_map *map, int verbose, int trace_mode)
              while (1)
                {
                  ElfW(Half) ndx = aux->vna_other & 0x7fff;
-                 map->l_versions[ndx].hash = aux->vna_hash;
-                 map->l_versions[ndx].hidden = aux->vna_other & 0x8000;
-                 map->l_versions[ndx].name = &strtab[aux->vna_name];
-                 map->l_versions[ndx].filename = &strtab[ent->vn_file];
+                 /* In trace mode, dependencies may be missing.  */
+                 if (__builtin_expect (ndx < map->l_nversions, 1))
+                   {
+                     map->l_versions[ndx].hash = aux->vna_hash;
+                     map->l_versions[ndx].hidden = aux->vna_other & 0x8000;
+                     map->l_versions[ndx].name = &strtab[aux->vna_name];
+                     map->l_versions[ndx].filename = &strtab[ent->vn_file];
+                   }
 
                  if (aux->vna_next == 0)
                    /* No more symbols.  */