diff options
author | Andreas Schwab <schwab@redhat.com> | 2010-04-14 22:16:06 -0700 |
---|---|---|
committer | Petr Baudis <pasky@ucw.cz> | 2010-05-12 03:21:17 +0200 |
commit | 59d5bd49df96b85c0e61ee21c74f0c7d91c34304 (patch) | |
tree | 6c46d55751bbe59b85d228242d4b600640c7370a | |
parent | 39879d17a46e063c674ecf5532cb8c1f49fc7277 (diff) | |
download | glibc-59d5bd49df96b85c0e61ee21c74f0c7d91c34304.zip glibc-59d5bd49df96b85c0e61ee21c74f0c7d91c34304.tar.gz glibc-59d5bd49df96b85c0e61ee21c74f0c7d91c34304.tar.bz2 |
Don't crash in trace mode when dependencies are missing
(cherry picked from commit 18a26b301b6ab0d68474fbfffb0d17adf69e8824)
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | elf/dl-version.c | 12 |
2 files changed, 13 insertions, 4 deletions
@@ -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-09 Ulrich Drepper <drepper@redhat.com> * nscd/aicache.c (addhstaiX): Correct passing memory to address 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. */ |