From: Andreas Schwab Date: Thu, 15 Apr 2010 05:16:06 +0000 (-0700) Subject: Don't crash in trace mode when dependencies are missing X-Git-Tag: fedora/glibc-2.11.90-20~1^2~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=18a26b301b6ab0d68474fbfffb0d17adf69e8824;p=thirdparty%2Fglibc.git Don't crash in trace mode when dependencies are missing --- diff --git a/ChangeLog b/ChangeLog index 0196c24be85..9b23fd979d4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2010-04-14 Andreas Schwab + + * elf/dl-version.c (_dl_check_map_versions): Avoid index overflow + when dependencies are missing. + 2010-04-14 H.J. Lu * sysdeps/x86_64/multiarch/memcmp-sse4.S: Optimized for unaligned diff --git a/elf/dl-version.c b/elf/dl-version.c index 9e881162a60..c59a6c3cd3e 100644 --- a/elf/dl-version.c +++ b/elf/dl-version.c @@ -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. */