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 <maninder...@samsung.com>
>Signed-off-by: Vaneet Narang <v.nar...@samsung.com>
>Reviewed-by: Doha Hwang <doha.hw...@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
-- 
_______________________________________________
yocto mailing list
yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/yocto

Reply via email to