about summary refs log tree commit diff
path: root/elf
diff options
context:
space:
mode:
Diffstat (limited to 'elf')
-rw-r--r--elf/dl-load.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/elf/dl-load.c b/elf/dl-load.c
index 2c1f2a5a6a..ad29386823 100644
--- a/elf/dl-load.c
+++ b/elf/dl-load.c
@@ -408,10 +408,12 @@ fillin_rpath (char *rpath, struct r_search_path_elem **result, const char *sep,
 	{
 	  size_t cnt;
 	  enum r_dir_status init_val;
+	  size_t where_len = strlen (where) + 1;
 
 	  /* It's a new directory.  Create an entry and add it.  */
 	  dirp = (struct r_search_path_elem *)
-	    malloc (sizeof (*dirp) + ncapstr * sizeof (enum r_dir_status));
+	    malloc (sizeof (*dirp) + ncapstr * sizeof (enum r_dir_status)
+		    + where_len);
 	  if (dirp == NULL)
 	    _dl_signal_error (ENOMEM, NULL,
 			      N_("cannot create cache for search path"));
@@ -430,7 +432,9 @@ fillin_rpath (char *rpath, struct r_search_path_elem **result, const char *sep,
 	    dirp->status[cnt] = init_val;
 
 	  dirp->what = what;
-	  dirp->where = where;
+	  dirp->where = memcpy ((char *) dirp + sizeof (*dirp)
+				+ ncapstr * sizeof (enum r_dir_status),
+				where, where_len);
 
 	  dirp->next = all_dirs;
 	  all_dirs = dirp;