From c4de707a42f04d657367a08a9a4222ceee05f2e3 Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Mon, 16 Jun 2003 07:34:25 +0000 Subject: Fix a segfault when used on a library w/o an INTERP program header. --- ldso/util/ldd.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'ldso') diff --git a/ldso/util/ldd.c b/ldso/util/ldd.c index 661fb865f..b7a8dfe3a 100644 --- a/ldso/util/ldd.c +++ b/ldso/util/ldd.c @@ -122,6 +122,7 @@ char not_found[] = "not found"; char *interp = NULL; char *interp_dir = NULL; int byteswap; +static int interpreter_already_found=0; inline uint32_t byteswap32_to_host(uint32_t value) { @@ -352,7 +353,7 @@ static int add_library(Elf32_Ehdr* ehdr, Elf32_Dyn* dynamic, int is_setuid, char } /* We add libc.so.0 elsewhere */ - if ((tmp=strrchr(interp, '/')) != NULL) + if (interpreter_already_found && (tmp=strrchr(interp, '/')) != NULL) { int len = strlen(interp_dir); if (strcmp(s, interp+1+len)==0) @@ -409,14 +410,12 @@ static void find_needed_libraries(Elf32_Ehdr* ehdr, Elf32_Dyn* dynamic, char *st } } -static int interpreter_already_found=0; static struct library * find_elf_interpreter(Elf32_Ehdr* ehdr) { Elf32_Phdr *phdr; if (interpreter_already_found==1) return NULL; - interpreter_already_found=1; phdr = elf_find_phdr_type(PT_INTERP, ehdr); if (phdr) { struct library *cur, *newlib=NULL; @@ -467,6 +466,7 @@ static struct library * find_elf_interpreter(Elf32_Ehdr* ehdr) cur->next = newlib; } #endif + interpreter_already_found=1; return newlib; } return NULL; -- cgit v1.2.3