diff options
| -rw-r--r-- | ldso/util/ldd.c | 25 | 
1 files changed, 11 insertions, 14 deletions
diff --git a/ldso/util/ldd.c b/ldso/util/ldd.c index 0cf3c798e..132457905 100644 --- a/ldso/util/ldd.c +++ b/ldso/util/ldd.c @@ -221,7 +221,7 @@ void locate_library_file(Elf32_Ehdr* ehdr, Elf32_Dyn* dynamic, char *strtab, int  static int add_library(Elf32_Ehdr* ehdr, Elf32_Dyn* dynamic, char *strtab, int is_setuid, const char *s)  { -	struct library *cur, *prev, *newlib=lib_list; +	struct library *cur, *newlib=lib_list;  	if (!s || !strlen(s))  		return 1; @@ -254,9 +254,8 @@ static int add_library(Elf32_Ehdr* ehdr, Elf32_Dyn* dynamic, char *strtab, int i  	if (!lib_list) {  		lib_list = newlib;  	} else { -		for (cur = prev = lib_list;  cur->next; prev=cur, cur=cur->next); /* nothing */ -		cur = newlib; -		prev->next = cur; +		for (cur = lib_list;  cur->next; cur=cur->next); /* nothing */ +		cur->next = newlib;  	}  	return 0;  } @@ -275,18 +274,17 @@ static void find_needed_libraries(Elf32_Ehdr* ehdr, Elf32_Dyn* dynamic, char *st  static void find_elf_interpreter(Elf32_Ehdr* ehdr, Elf32_Dyn* dynamic, char *strtab, int is_setuid)  { +	static int been_there_done_that=0;  	Elf32_Phdr *phdr; + +	if (been_there_done_that==1) +		return; +	been_there_done_that=1;  	phdr = elf_find_phdr_type(PT_INTERP, ehdr);  	if (phdr) { -		struct library *cur, *prev, *newlib=lib_list; +		struct library *cur, *newlib=lib_list;  		char *s = (char*)ehdr + phdr->p_offset; -		for (cur = lib_list; cur; cur=cur->next) { -			if(strcmp(cur->name, s)==0) { -				/* Lib is already in the list */ -				return; -			} -		}  		newlib = malloc(sizeof(struct library));  		if (!newlib)  			return; @@ -300,9 +298,8 @@ static void find_elf_interpreter(Elf32_Ehdr* ehdr, Elf32_Dyn* dynamic, char *str  		if (!lib_list) {  			lib_list = newlib;  		} else { -			for (cur = prev = lib_list;  cur->next; prev=cur, cur=cur->next); /* nothing */ -			cur = newlib; -			prev->next = cur; +			for (cur = lib_list;  cur->next; cur=cur->next); /* nothing */ +			cur->next = newlib;  		}  	}  }  | 
