[yocto] [prelink-cross][PATCH 1/1] rtld.c: LD_PRELOAD bugfix
Maninder Singh
maninder1.s at samsung.com
Sat Nov 7 03:24:04 PST 2015
Hi,
Ping....
>This patch do following things:-
>1. Fixes bug of adding preloaded libs in search scope of dependent
> libraries which results in search scope of few symbols becomes
> same for executable and library, so conflict doesn't occur for
> those symbols and hence resulted in less number of conflicts.
>2. Reduce code redundancy.
>3. Buffer Overflow fix.
>
>Signed-off-by: Maninder Singh <maninder1.s at samsung.com>
>Signed-off-by: Vaneet Narang <v.narang at samsung.com>
>Reviewed-by: Doha Hwang <doha.hwang at samsung.com>
>---
> trunk/src/rtld/rtld.c | 27 ++++++++++++++++-----------
> 1 files changed, 16 insertions(+), 11 deletions(-)
>
>diff --git a/trunk/src/rtld/rtld.c b/trunk/src/rtld/rtld.c
>index 50461b6..8af5052 100644
>--- a/trunk/src/rtld/rtld.c
>+++ b/trunk/src/rtld/rtld.c
>@@ -606,7 +606,7 @@ load_dsos (DSO *dso, int host_paths)
> {
> struct dso_list *dso_list, *dso_list_tail, *cur_dso_ent, *new_dso_ent;
> struct stat64 st;
>- int total_preload = 0;
>+ int total_preload = 0, temp_total_preload = 0;
> char * libname[MAX_PRELOADED_LIBS] = {NULL};
>
> /* Assume it's static unless we find DT_NEEDED entries */
>@@ -632,19 +632,19 @@ load_dsos (DSO *dso, int host_paths)
>
> if(dso->ehdr.e_type == ET_EXEC && ld_preload) {
> char *next_lib = ld_preload;
>- libname[total_preload] = ld_preload;
>- total_preload++;
>- next_lib=strchr(ld_preload,':');
>- while(next_lib!=NULL){
>- *next_lib = '\0';
>- next_lib++;
>- libname[total_preload] = next_lib;
>- total_preload++;
>- next_lib=strchr(next_lib,':');
>- }
>+ while(*next_lib != '\0' && (total_preload < MAX_PRELOADED_LIBS)){
>+ libname[total_preload++] = next_lib;
>+ next_lib=strchrnul(next_lib,':');
>+ if(*next_lib == '\0')
>+ break;
>+ *next_lib = '\0';
>+ next_lib++;
>+ }
>+ temp_total_preload = total_preload;
> }
> else {
> total_preload = 0;
>+ temp_total_preload = 0;
> }
> while (cur_dso_ent != NULL)
> {
>@@ -666,6 +666,11 @@ load_dsos (DSO *dso, int host_paths)
> {
> int ndx, maxndx;
> maxndx = data->d_size / cur_dso->shdr[cur_dso->dynamic].sh_entsize;
>+ if(!(cur_dso->ehdr.e_type == ET_EXEC))
>+ total_preload = 0;
>+ else
>+ total_preload = temp_total_preload;
>+
> for (ndx = 0; ndx < maxndx + total_preload; ++ndx)
> {
>
>--
>1.7.1
More information about the yocto
mailing list