aboutsummaryrefslogtreecommitdiff
path: root/elf/dl-version.c
diff options
context:
space:
mode:
authorAndreas Schwab <schwab@redhat.com>2010-04-14 22:16:06 -0700
committerUlrich Drepper <drepper@redhat.com>2010-04-14 22:16:06 -0700
commit18a26b301b6ab0d68474fbfffb0d17adf69e8824 (patch)
tree849dadef22c24dd499bcad6962eaed42550bc5ae /elf/dl-version.c
parent2645b8e5cc44efe4856b1dad351414e50d91dfad (diff)
downloadglibc-18a26b301b6ab0d68474fbfffb0d17adf69e8824.zip
glibc-18a26b301b6ab0d68474fbfffb0d17adf69e8824.tar.gz
glibc-18a26b301b6ab0d68474fbfffb0d17adf69e8824.tar.bz2
Don't crash in trace mode when dependencies are missing
Diffstat (limited to 'elf/dl-version.c')
-rw-r--r--elf/dl-version.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/elf/dl-version.c b/elf/dl-version.c
index 9e88116..c59a6c3 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. */