Pad each field to __syscall_slong_t in struct rusage
[platform/upstream/glibc.git] / elf / dl-load.c
1 /* Map in a shared object's segments from the file.
2    Copyright (C) 1995-2012 Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
4
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
9
10    The GNU C Library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
14
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; if not, see
17    <http://www.gnu.org/licenses/>.  */
18
19 #include <elf.h>
20 #include <errno.h>
21 #include <fcntl.h>
22 #include <libintl.h>
23 #include <stdbool.h>
24 #include <stdlib.h>
25 #include <string.h>
26 #include <unistd.h>
27 #include <ldsodefs.h>
28 #include <bits/wordsize.h>
29 #include <sys/mman.h>
30 #include <sys/param.h>
31 #include <sys/stat.h>
32 #include <sys/types.h>
33 #include "dynamic-link.h"
34 #include <abi-tag.h>
35 #include <stackinfo.h>
36 #include <caller.h>
37 #include <sysdep.h>
38
39 #include <dl-dst.h>
40
41 /* On some systems, no flag bits are given to specify file mapping.  */
42 #ifndef MAP_FILE
43 # define MAP_FILE       0
44 #endif
45
46 /* The right way to map in the shared library files is MAP_COPY, which
47    makes a virtual copy of the data at the time of the mmap call; this
48    guarantees the mapped pages will be consistent even if the file is
49    overwritten.  Some losing VM systems like Linux's lack MAP_COPY.  All we
50    get is MAP_PRIVATE, which copies each page when it is modified; this
51    means if the file is overwritten, we may at some point get some pages
52    from the new version after starting with pages from the old version.
53
54    To make up for the lack and avoid the overwriting problem,
55    what Linux does have is MAP_DENYWRITE.  This prevents anyone
56    from modifying the file while we have it mapped.  */
57 #ifndef MAP_COPY
58 # ifdef MAP_DENYWRITE
59 #  define MAP_COPY      (MAP_PRIVATE | MAP_DENYWRITE)
60 # else
61 #  define MAP_COPY      MAP_PRIVATE
62 # endif
63 #endif
64
65 /* Some systems link their relocatable objects for another base address
66    than 0.  We want to know the base address for these such that we can
67    subtract this address from the segment addresses during mapping.
68    This results in a more efficient address space usage.  Defaults to
69    zero for almost all systems.  */
70 #ifndef MAP_BASE_ADDR
71 # define MAP_BASE_ADDR(l)       0
72 #endif
73
74
75 #include <endian.h>
76 #if BYTE_ORDER == BIG_ENDIAN
77 # define byteorder ELFDATA2MSB
78 #elif BYTE_ORDER == LITTLE_ENDIAN
79 # define byteorder ELFDATA2LSB
80 #else
81 # error "Unknown BYTE_ORDER " BYTE_ORDER
82 # define byteorder ELFDATANONE
83 #endif
84
85 #define STRING(x) __STRING (x)
86
87 /* Handle situations where we have a preferred location in memory for
88    the shared objects.  */
89 #ifdef ELF_PREFERRED_ADDRESS_DATA
90 ELF_PREFERRED_ADDRESS_DATA;
91 #endif
92 #ifndef ELF_PREFERRED_ADDRESS
93 # define ELF_PREFERRED_ADDRESS(loader, maplength, mapstartpref) (mapstartpref)
94 #endif
95 #ifndef ELF_FIXED_ADDRESS
96 # define ELF_FIXED_ADDRESS(loader, mapstart) ((void) 0)
97 #endif
98
99
100 int __stack_prot attribute_hidden attribute_relro
101 #if _STACK_GROWS_DOWN && defined PROT_GROWSDOWN
102   = PROT_GROWSDOWN;
103 #elif _STACK_GROWS_UP && defined PROT_GROWSUP
104   = PROT_GROWSUP;
105 #else
106   = 0;
107 #endif
108
109
110 /* Type for the buffer we put the ELF header and hopefully the program
111    header.  This buffer does not really have to be too large.  In most
112    cases the program header follows the ELF header directly.  If this
113    is not the case all bets are off and we can make the header
114    arbitrarily large and still won't get it read.  This means the only
115    question is how large are the ELF and program header combined.  The
116    ELF header 32-bit files is 52 bytes long and in 64-bit files is 64
117    bytes long.  Each program header entry is again 32 and 56 bytes
118    long respectively.  I.e., even with a file which has 10 program
119    header entries we only have to read 372B/624B respectively.  Add to
120    this a bit of margin for program notes and reading 512B and 832B
121    for 32-bit and 64-bit files respecitvely is enough.  If this
122    heuristic should really fail for some file the code in
123    `_dl_map_object_from_fd' knows how to recover.  */
124 struct filebuf
125 {
126   ssize_t len;
127 #if __WORDSIZE == 32
128 # define FILEBUF_SIZE 512
129 #else
130 # define FILEBUF_SIZE 832
131 #endif
132   char buf[FILEBUF_SIZE] __attribute__ ((aligned (__alignof (ElfW(Ehdr)))));
133 };
134
135 /* This is the decomposed LD_LIBRARY_PATH search path.  */
136 static struct r_search_path_struct env_path_list attribute_relro;
137
138 /* List of the hardware capabilities we might end up using.  */
139 static const struct r_strlenpair *capstr attribute_relro;
140 static size_t ncapstr attribute_relro;
141 static size_t max_capstrlen attribute_relro;
142
143
144 /* Get the generated information about the trusted directories.  */
145 #include "trusted-dirs.h"
146
147 static const char system_dirs[] = SYSTEM_DIRS;
148 static const size_t system_dirs_len[] =
149 {
150   SYSTEM_DIRS_LEN
151 };
152 #define nsystem_dirs_len \
153   (sizeof (system_dirs_len) / sizeof (system_dirs_len[0]))
154
155
156 /* Local version of `strdup' function.  */
157 static char *
158 local_strdup (const char *s)
159 {
160   size_t len = strlen (s) + 1;
161   void *new = malloc (len);
162
163   if (new == NULL)
164     return NULL;
165
166   return (char *) memcpy (new, s, len);
167 }
168
169
170 static bool
171 is_trusted_path (const char *path, size_t len)
172 {
173   const char *trun = system_dirs;
174
175   for (size_t idx = 0; idx < nsystem_dirs_len; ++idx)
176     {
177       if (len == system_dirs_len[idx] && memcmp (trun, path, len) == 0)
178         /* Found it.  */
179         return true;
180
181       trun += system_dirs_len[idx] + 1;
182     }
183
184   return false;
185 }
186
187
188 static bool
189 is_trusted_path_normalize (const char *path, size_t len)
190 {
191   if (len == 0)
192     return false;
193
194   if (*path == ':')
195     {
196       ++path;
197       --len;
198     }
199
200   char *npath = (char *) alloca (len + 2);
201   char *wnp = npath;
202   while (*path != '\0')
203     {
204       if (path[0] == '/')
205         {
206           if (path[1] == '.')
207             {
208               if (path[2] == '.' && (path[3] == '/' || path[3] == '\0'))
209                 {
210                   while (wnp > npath && *--wnp != '/')
211                     ;
212                   path += 3;
213                   continue;
214                 }
215               else if (path[2] == '/' || path[2] == '\0')
216                 {
217                   path += 2;
218                   continue;
219                 }
220             }
221
222           if (wnp > npath && wnp[-1] == '/')
223             {
224               ++path;
225               continue;
226             }
227         }
228
229       *wnp++ = *path++;
230     }
231
232   if (wnp == npath || wnp[-1] != '/')
233     *wnp++ = '/';
234
235   const char *trun = system_dirs;
236
237   for (size_t idx = 0; idx < nsystem_dirs_len; ++idx)
238     {
239       if (wnp - npath >= system_dirs_len[idx]
240           && memcmp (trun, npath, system_dirs_len[idx]) == 0)
241         /* Found it.  */
242         return true;
243
244       trun += system_dirs_len[idx] + 1;
245     }
246
247   return false;
248 }
249
250
251 static size_t
252 is_dst (const char *start, const char *name, const char *str,
253         int is_path, int secure)
254 {
255   size_t len;
256   bool is_curly = false;
257
258   if (name[0] == '{')
259     {
260       is_curly = true;
261       ++name;
262     }
263
264   len = 0;
265   while (name[len] == str[len] && name[len] != '\0')
266     ++len;
267
268   if (is_curly)
269     {
270       if (name[len] != '}')
271         return 0;
272
273       /* Point again at the beginning of the name.  */
274       --name;
275       /* Skip over closing curly brace and adjust for the --name.  */
276       len += 2;
277     }
278   else if (name[len] != '\0' && name[len] != '/'
279            && (!is_path || name[len] != ':'))
280     return 0;
281
282   if (__builtin_expect (secure, 0)
283       && ((name[len] != '\0' && name[len] != '/'
284            && (!is_path || name[len] != ':'))
285           || (name != start + 1 && (!is_path || name[-2] != ':'))))
286     return 0;
287
288   return len;
289 }
290
291
292 size_t
293 _dl_dst_count (const char *name, int is_path)
294 {
295   const char *const start = name;
296   size_t cnt = 0;
297
298   do
299     {
300       size_t len;
301
302       /* $ORIGIN is not expanded for SUID/GUID programs (except if it
303          is $ORIGIN alone) and it must always appear first in path.  */
304       ++name;
305       if ((len = is_dst (start, name, "ORIGIN", is_path,
306                          INTUSE(__libc_enable_secure))) != 0
307           || (len = is_dst (start, name, "PLATFORM", is_path, 0)) != 0
308           || (len = is_dst (start, name, "LIB", is_path, 0)) != 0)
309         ++cnt;
310
311       name = strchr (name + len, '$');
312     }
313   while (name != NULL);
314
315   return cnt;
316 }
317
318
319 char *
320 _dl_dst_substitute (struct link_map *l, const char *name, char *result,
321                     int is_path)
322 {
323   const char *const start = name;
324
325   /* Now fill the result path.  While copying over the string we keep
326      track of the start of the last path element.  When we come accross
327      a DST we copy over the value or (if the value is not available)
328      leave the entire path element out.  */
329   char *wp = result;
330   char *last_elem = result;
331   bool check_for_trusted = false;
332
333   do
334     {
335       if (__builtin_expect (*name == '$', 0))
336         {
337           const char *repl = NULL;
338           size_t len;
339
340           ++name;
341           if ((len = is_dst (start, name, "ORIGIN", is_path,
342                              INTUSE(__libc_enable_secure))) != 0)
343             {
344 #ifndef SHARED
345               if (l == NULL)
346                 repl = _dl_get_origin ();
347               else
348 #endif
349                 repl = l->l_origin;
350
351               check_for_trusted = (INTUSE(__libc_enable_secure)
352                                    && l->l_type == lt_executable);
353             }
354           else if ((len = is_dst (start, name, "PLATFORM", is_path, 0)) != 0)
355             repl = GLRO(dl_platform);
356           else if ((len = is_dst (start, name, "LIB", is_path, 0)) != 0)
357             repl = DL_DST_LIB;
358
359           if (repl != NULL && repl != (const char *) -1)
360             {
361               wp = __stpcpy (wp, repl);
362               name += len;
363             }
364           else if (len > 1)
365             {
366               /* We cannot use this path element, the value of the
367                  replacement is unknown.  */
368               wp = last_elem;
369               name += len;
370               while (*name != '\0' && (!is_path || *name != ':'))
371                 ++name;
372               /* Also skip following colon if this is the first rpath
373                  element, but keep an empty element at the end.  */
374               if (wp == result && is_path && *name == ':' && name[1] != '\0')
375                 ++name;
376             }
377           else
378             /* No DST we recognize.  */
379             *wp++ = '$';
380         }
381       else
382         {
383           *wp++ = *name++;
384           if (is_path && *name == ':')
385             {
386               /* In SUID/SGID programs, after $ORIGIN expansion the
387                  normalized path must be rooted in one of the trusted
388                  directories.  */
389               if (__builtin_expect (check_for_trusted, false)
390                   && !is_trusted_path_normalize (last_elem, wp - last_elem))
391                 wp = last_elem;
392               else
393                 last_elem = wp;
394
395               check_for_trusted = false;
396             }
397         }
398     }
399   while (*name != '\0');
400
401   /* In SUID/SGID programs, after $ORIGIN expansion the normalized
402      path must be rooted in one of the trusted directories.  */
403   if (__builtin_expect (check_for_trusted, false)
404       && !is_trusted_path_normalize (last_elem, wp - last_elem))
405     wp = last_elem;
406
407   *wp = '\0';
408
409   return result;
410 }
411
412
413 /* Return copy of argument with all recognized dynamic string tokens
414    ($ORIGIN and $PLATFORM for now) replaced.  On some platforms it
415    might not be possible to determine the path from which the object
416    belonging to the map is loaded.  In this case the path element
417    containing $ORIGIN is left out.  */
418 static char *
419 expand_dynamic_string_token (struct link_map *l, const char *s, int is_path)
420 {
421   /* We make two runs over the string.  First we determine how large the
422      resulting string is and then we copy it over.  Since this is no
423      frequently executed operation we are looking here not for performance
424      but rather for code size.  */
425   size_t cnt;
426   size_t total;
427   char *result;
428
429   /* Determine the number of DST elements.  */
430   cnt = DL_DST_COUNT (s, is_path);
431
432   /* If we do not have to replace anything simply copy the string.  */
433   if (__builtin_expect (cnt, 0) == 0)
434     return local_strdup (s);
435
436   /* Determine the length of the substituted string.  */
437   total = DL_DST_REQUIRED (l, s, strlen (s), cnt);
438
439   /* Allocate the necessary memory.  */
440   result = (char *) malloc (total + 1);
441   if (result == NULL)
442     return NULL;
443
444   return _dl_dst_substitute (l, s, result, is_path);
445 }
446
447
448 /* Add `name' to the list of names for a particular shared object.
449    `name' is expected to have been allocated with malloc and will
450    be freed if the shared object already has this name.
451    Returns false if the object already had this name.  */
452 static void
453 internal_function
454 add_name_to_object (struct link_map *l, const char *name)
455 {
456   struct libname_list *lnp, *lastp;
457   struct libname_list *newname;
458   size_t name_len;
459
460   lastp = NULL;
461   for (lnp = l->l_libname; lnp != NULL; lastp = lnp, lnp = lnp->next)
462     if (strcmp (name, lnp->name) == 0)
463       return;
464
465   name_len = strlen (name) + 1;
466   newname = (struct libname_list *) malloc (sizeof *newname + name_len);
467   if (newname == NULL)
468     {
469       /* No more memory.  */
470       _dl_signal_error (ENOMEM, name, NULL, N_("cannot allocate name record"));
471       return;
472     }
473   /* The object should have a libname set from _dl_new_object.  */
474   assert (lastp != NULL);
475
476   newname->name = memcpy (newname + 1, name, name_len);
477   newname->next = NULL;
478   newname->dont_free = 0;
479   lastp->next = newname;
480 }
481
482 /* Standard search directories.  */
483 static struct r_search_path_struct rtld_search_dirs attribute_relro;
484
485 static size_t max_dirnamelen;
486
487 static struct r_search_path_elem **
488 fillin_rpath (char *rpath, struct r_search_path_elem **result, const char *sep,
489               int check_trusted, const char *what, const char *where)
490 {
491   char *cp;
492   size_t nelems = 0;
493
494   while ((cp = __strsep (&rpath, sep)) != NULL)
495     {
496       struct r_search_path_elem *dirp;
497       size_t len = strlen (cp);
498
499       /* `strsep' can pass an empty string.  This has to be
500          interpreted as `use the current directory'. */
501       if (len == 0)
502         {
503           static const char curwd[] = "./";
504           cp = (char *) curwd;
505         }
506
507       /* Remove trailing slashes (except for "/").  */
508       while (len > 1 && cp[len - 1] == '/')
509         --len;
510
511       /* Now add one if there is none so far.  */
512       if (len > 0 && cp[len - 1] != '/')
513         cp[len++] = '/';
514
515       /* Make sure we don't use untrusted directories if we run SUID.  */
516       if (__builtin_expect (check_trusted, 0) && !is_trusted_path (cp, len))
517         continue;
518
519       /* See if this directory is already known.  */
520       for (dirp = GL(dl_all_dirs); dirp != NULL; dirp = dirp->next)
521         if (dirp->dirnamelen == len && memcmp (cp, dirp->dirname, len) == 0)
522           break;
523
524       if (dirp != NULL)
525         {
526           /* It is available, see whether it's on our own list.  */
527           size_t cnt;
528           for (cnt = 0; cnt < nelems; ++cnt)
529             if (result[cnt] == dirp)
530               break;
531
532           if (cnt == nelems)
533             result[nelems++] = dirp;
534         }
535       else
536         {
537           size_t cnt;
538           enum r_dir_status init_val;
539           size_t where_len = where ? strlen (where) + 1 : 0;
540
541           /* It's a new directory.  Create an entry and add it.  */
542           dirp = (struct r_search_path_elem *)
543             malloc (sizeof (*dirp) + ncapstr * sizeof (enum r_dir_status)
544                     + where_len + len + 1);
545           if (dirp == NULL)
546             _dl_signal_error (ENOMEM, NULL, NULL,
547                               N_("cannot create cache for search path"));
548
549           dirp->dirname = ((char *) dirp + sizeof (*dirp)
550                            + ncapstr * sizeof (enum r_dir_status));
551           *((char *) __mempcpy ((char *) dirp->dirname, cp, len)) = '\0';
552           dirp->dirnamelen = len;
553
554           if (len > max_dirnamelen)
555             max_dirnamelen = len;
556
557           /* We have to make sure all the relative directories are
558              never ignored.  The current directory might change and
559              all our saved information would be void.  */
560           init_val = cp[0] != '/' ? existing : unknown;
561           for (cnt = 0; cnt < ncapstr; ++cnt)
562             dirp->status[cnt] = init_val;
563
564           dirp->what = what;
565           if (__builtin_expect (where != NULL, 1))
566             dirp->where = memcpy ((char *) dirp + sizeof (*dirp) + len + 1
567                                   + (ncapstr * sizeof (enum r_dir_status)),
568                                   where, where_len);
569           else
570             dirp->where = NULL;
571
572           dirp->next = GL(dl_all_dirs);
573           GL(dl_all_dirs) = dirp;
574
575           /* Put it in the result array.  */
576           result[nelems++] = dirp;
577         }
578     }
579
580   /* Terminate the array.  */
581   result[nelems] = NULL;
582
583   return result;
584 }
585
586
587 static bool
588 internal_function
589 decompose_rpath (struct r_search_path_struct *sps,
590                  const char *rpath, struct link_map *l, const char *what)
591 {
592   /* Make a copy we can work with.  */
593   const char *where = l->l_name;
594   char *copy;
595   char *cp;
596   struct r_search_path_elem **result;
597   size_t nelems;
598   /* Initialize to please the compiler.  */
599   const char *errstring = NULL;
600
601   /* First see whether we must forget the RUNPATH and RPATH from this
602      object.  */
603   if (__builtin_expect (GLRO(dl_inhibit_rpath) != NULL, 0)
604       && !INTUSE(__libc_enable_secure))
605     {
606       const char *inhp = GLRO(dl_inhibit_rpath);
607
608       do
609         {
610           const char *wp = where;
611
612           while (*inhp == *wp && *wp != '\0')
613             {
614               ++inhp;
615               ++wp;
616             }
617
618           if (*wp == '\0' && (*inhp == '\0' || *inhp == ':'))
619             {
620               /* This object is on the list of objects for which the
621                  RUNPATH and RPATH must not be used.  */
622               sps->dirs = (void *) -1;
623               return false;
624             }
625
626           while (*inhp != '\0')
627             if (*inhp++ == ':')
628               break;
629         }
630       while (*inhp != '\0');
631     }
632
633   /* Make a writable copy.  At the same time expand possible dynamic
634      string tokens.  */
635   copy = expand_dynamic_string_token (l, rpath, 1);
636   if (copy == NULL)
637     {
638       errstring = N_("cannot create RUNPATH/RPATH copy");
639       goto signal_error;
640     }
641
642   /* Ignore empty rpaths.  */
643   if (*copy == 0)
644     {
645       free (copy);
646       sps->dirs = (struct r_search_path_elem **) -1;
647       return false;
648     }
649
650   /* Count the number of necessary elements in the result array.  */
651   nelems = 0;
652   for (cp = copy; *cp != '\0'; ++cp)
653     if (*cp == ':')
654       ++nelems;
655
656   /* Allocate room for the result.  NELEMS + 1 is an upper limit for the
657      number of necessary entries.  */
658   result = (struct r_search_path_elem **) malloc ((nelems + 1 + 1)
659                                                   * sizeof (*result));
660   if (result == NULL)
661     {
662       free (copy);
663       errstring = N_("cannot create cache for search path");
664     signal_error:
665       _dl_signal_error (ENOMEM, NULL, NULL, errstring);
666     }
667
668   fillin_rpath (copy, result, ":", 0, what, where);
669
670   /* Free the copied RPATH string.  `fillin_rpath' make own copies if
671      necessary.  */
672   free (copy);
673
674   sps->dirs = result;
675   /* The caller will change this value if we haven't used a real malloc.  */
676   sps->malloced = 1;
677   return true;
678 }
679
680 /* Make sure cached path information is stored in *SP
681    and return true if there are any paths to search there.  */
682 static bool
683 cache_rpath (struct link_map *l,
684              struct r_search_path_struct *sp,
685              int tag,
686              const char *what)
687 {
688   if (sp->dirs == (void *) -1)
689     return false;
690
691   if (sp->dirs != NULL)
692     return true;
693
694   if (l->l_info[tag] == NULL)
695     {
696       /* There is no path.  */
697       sp->dirs = (void *) -1;
698       return false;
699     }
700
701   /* Make sure the cache information is available.  */
702   return decompose_rpath (sp, (const char *) (D_PTR (l, l_info[DT_STRTAB])
703                                               + l->l_info[tag]->d_un.d_val),
704                           l, what);
705 }
706
707
708 void
709 internal_function
710 _dl_init_paths (const char *llp)
711 {
712   size_t idx;
713   const char *strp;
714   struct r_search_path_elem *pelem, **aelem;
715   size_t round_size;
716 #ifdef SHARED
717   struct link_map *l;
718 #endif
719   /* Initialize to please the compiler.  */
720   const char *errstring = NULL;
721
722   /* Fill in the information about the application's RPATH and the
723      directories addressed by the LD_LIBRARY_PATH environment variable.  */
724
725   /* Get the capabilities.  */
726   capstr = _dl_important_hwcaps (GLRO(dl_platform), GLRO(dl_platformlen),
727                                  &ncapstr, &max_capstrlen);
728
729   /* First set up the rest of the default search directory entries.  */
730   aelem = rtld_search_dirs.dirs = (struct r_search_path_elem **)
731     malloc ((nsystem_dirs_len + 1) * sizeof (struct r_search_path_elem *));
732   if (rtld_search_dirs.dirs == NULL)
733     {
734       errstring = N_("cannot create search path array");
735     signal_error:
736       _dl_signal_error (ENOMEM, NULL, NULL, errstring);
737     }
738
739   round_size = ((2 * sizeof (struct r_search_path_elem) - 1
740                  + ncapstr * sizeof (enum r_dir_status))
741                 / sizeof (struct r_search_path_elem));
742
743   rtld_search_dirs.dirs[0] = (struct r_search_path_elem *)
744     malloc ((sizeof (system_dirs) / sizeof (system_dirs[0]))
745             * round_size * sizeof (struct r_search_path_elem));
746   if (rtld_search_dirs.dirs[0] == NULL)
747     {
748       errstring = N_("cannot create cache for search path");
749       goto signal_error;
750     }
751
752   rtld_search_dirs.malloced = 0;
753   pelem = GL(dl_all_dirs) = rtld_search_dirs.dirs[0];
754   strp = system_dirs;
755   idx = 0;
756
757   do
758     {
759       size_t cnt;
760
761       *aelem++ = pelem;
762
763       pelem->what = "system search path";
764       pelem->where = NULL;
765
766       pelem->dirname = strp;
767       pelem->dirnamelen = system_dirs_len[idx];
768       strp += system_dirs_len[idx] + 1;
769
770       /* System paths must be absolute.  */
771       assert (pelem->dirname[0] == '/');
772       for (cnt = 0; cnt < ncapstr; ++cnt)
773         pelem->status[cnt] = unknown;
774
775       pelem->next = (++idx == nsystem_dirs_len ? NULL : (pelem + round_size));
776
777       pelem += round_size;
778     }
779   while (idx < nsystem_dirs_len);
780
781   max_dirnamelen = SYSTEM_DIRS_MAX_LEN;
782   *aelem = NULL;
783
784 #ifdef SHARED
785   /* This points to the map of the main object.  */
786   l = GL(dl_ns)[LM_ID_BASE]._ns_loaded;
787   if (l != NULL)
788     {
789       assert (l->l_type != lt_loaded);
790
791       if (l->l_info[DT_RUNPATH])
792         {
793           /* Allocate room for the search path and fill in information
794              from RUNPATH.  */
795           decompose_rpath (&l->l_runpath_dirs,
796                            (const void *) (D_PTR (l, l_info[DT_STRTAB])
797                                            + l->l_info[DT_RUNPATH]->d_un.d_val),
798                            l, "RUNPATH");
799
800           /* The RPATH is ignored.  */
801           l->l_rpath_dirs.dirs = (void *) -1;
802         }
803       else
804         {
805           l->l_runpath_dirs.dirs = (void *) -1;
806
807           if (l->l_info[DT_RPATH])
808             {
809               /* Allocate room for the search path and fill in information
810                  from RPATH.  */
811               decompose_rpath (&l->l_rpath_dirs,
812                                (const void *) (D_PTR (l, l_info[DT_STRTAB])
813                                                + l->l_info[DT_RPATH]->d_un.d_val),
814                                l, "RPATH");
815               l->l_rpath_dirs.malloced = 0;
816             }
817           else
818             l->l_rpath_dirs.dirs = (void *) -1;
819         }
820     }
821 #endif  /* SHARED */
822
823   if (llp != NULL && *llp != '\0')
824     {
825       size_t nllp;
826       const char *cp = llp;
827       char *llp_tmp;
828
829 #ifdef SHARED
830       /* Expand DSTs.  */
831       size_t cnt = DL_DST_COUNT (llp, 1);
832       if (__builtin_expect (cnt == 0, 1))
833         llp_tmp = strdupa (llp);
834       else
835         {
836           /* Determine the length of the substituted string.  */
837           size_t total = DL_DST_REQUIRED (l, llp, strlen (llp), cnt);
838
839           /* Allocate the necessary memory.  */
840           llp_tmp = (char *) alloca (total + 1);
841           llp_tmp = _dl_dst_substitute (l, llp, llp_tmp, 1);
842         }
843 #else
844       llp_tmp = strdupa (llp);
845 #endif
846
847       /* Decompose the LD_LIBRARY_PATH contents.  First determine how many
848          elements it has.  */
849       nllp = 1;
850       while (*cp)
851         {
852           if (*cp == ':' || *cp == ';')
853             ++nllp;
854           ++cp;
855         }
856
857       env_path_list.dirs = (struct r_search_path_elem **)
858         malloc ((nllp + 1) * sizeof (struct r_search_path_elem *));
859       if (env_path_list.dirs == NULL)
860         {
861           errstring = N_("cannot create cache for search path");
862           goto signal_error;
863         }
864
865       (void) fillin_rpath (llp_tmp, env_path_list.dirs, ":;",
866                            INTUSE(__libc_enable_secure), "LD_LIBRARY_PATH",
867                            NULL);
868
869       if (env_path_list.dirs[0] == NULL)
870         {
871           free (env_path_list.dirs);
872           env_path_list.dirs = (void *) -1;
873         }
874
875       env_path_list.malloced = 0;
876     }
877   else
878     env_path_list.dirs = (void *) -1;
879 }
880
881
882 static void
883 __attribute__ ((noreturn, noinline))
884 lose (int code, int fd, const char *name, char *realname, struct link_map *l,
885       const char *msg, struct r_debug *r)
886 {
887   /* The file might already be closed.  */
888   if (fd != -1)
889     (void) __close (fd);
890   if (l != NULL && l->l_origin != (char *) -1l)
891     free ((char *) l->l_origin);
892   free (l);
893   free (realname);
894
895   if (r != NULL)
896     {
897       r->r_state = RT_CONSISTENT;
898       _dl_debug_state ();
899     }
900
901   _dl_signal_error (code, name, NULL, msg);
902 }
903
904
905 /* Map in the shared object NAME, actually located in REALNAME, and already
906    opened on FD.  */
907
908 #ifndef EXTERNAL_MAP_FROM_FD
909 static
910 #endif
911 struct link_map *
912 _dl_map_object_from_fd (const char *name, int fd, struct filebuf *fbp,
913                         char *realname, struct link_map *loader, int l_type,
914                         int mode, void **stack_endp, Lmid_t nsid)
915 {
916   struct link_map *l = NULL;
917   const ElfW(Ehdr) *header;
918   const ElfW(Phdr) *phdr;
919   const ElfW(Phdr) *ph;
920   size_t maplength;
921   int type;
922   struct stat64 st;
923   /* Initialize to keep the compiler happy.  */
924   const char *errstring = NULL;
925   int errval = 0;
926   struct r_debug *r = _dl_debug_initialize (0, nsid);
927   bool make_consistent = false;
928
929   /* Get file information.  */
930   if (__builtin_expect (__fxstat64 (_STAT_VER, fd, &st) < 0, 0))
931     {
932       errstring = N_("cannot stat shared object");
933     call_lose_errno:
934       errval = errno;
935     call_lose:
936       lose (errval, fd, name, realname, l, errstring,
937             make_consistent ? r : NULL);
938     }
939
940   /* Look again to see if the real name matched another already loaded.  */
941   for (l = GL(dl_ns)[nsid]._ns_loaded; l; l = l->l_next)
942     if (l->l_removed == 0 && l->l_ino == st.st_ino && l->l_dev == st.st_dev)
943       {
944         /* The object is already loaded.
945            Just bump its reference count and return it.  */
946         __close (fd);
947
948         /* If the name is not in the list of names for this object add
949            it.  */
950         free (realname);
951         add_name_to_object (l, name);
952
953         return l;
954       }
955
956 #ifdef SHARED
957   /* When loading into a namespace other than the base one we must
958      avoid loading ld.so since there can only be one copy.  Ever.  */
959   if (__builtin_expect (nsid != LM_ID_BASE, 0)
960       && ((st.st_ino == GL(dl_rtld_map).l_ino
961            && st.st_dev == GL(dl_rtld_map).l_dev)
962           || _dl_name_match_p (name, &GL(dl_rtld_map))))
963     {
964       /* This is indeed ld.so.  Create a new link_map which refers to
965          the real one for almost everything.  */
966       l = _dl_new_object (realname, name, l_type, loader, mode, nsid);
967       if (l == NULL)
968         goto fail_new;
969
970       /* Refer to the real descriptor.  */
971       l->l_real = &GL(dl_rtld_map);
972
973       /* No need to bump the refcount of the real object, ld.so will
974          never be unloaded.  */
975       __close (fd);
976
977       /* Add the map for the mirrored object to the object list.  */
978       _dl_add_to_namespace_list (l, nsid);
979
980       return l;
981     }
982 #endif
983
984   if (mode & RTLD_NOLOAD)
985     {
986       /* We are not supposed to load the object unless it is already
987          loaded.  So return now.  */
988       free (realname);
989       __close (fd);
990       return NULL;
991     }
992
993   /* Print debugging message.  */
994   if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_FILES, 0))
995     _dl_debug_printf ("file=%s [%lu];  generating link map\n", name, nsid);
996
997   /* This is the ELF header.  We read it in `open_verify'.  */
998   header = (void *) fbp->buf;
999
1000 #ifndef MAP_ANON
1001 # define MAP_ANON 0
1002   if (_dl_zerofd == -1)
1003     {
1004       _dl_zerofd = _dl_sysdep_open_zero_fill ();
1005       if (_dl_zerofd == -1)
1006         {
1007           free (realname);
1008           __close (fd);
1009           _dl_signal_error (errno, NULL, NULL,
1010                             N_("cannot open zero fill device"));
1011         }
1012     }
1013 #endif
1014
1015   /* Signal that we are going to add new objects.  */
1016   if (r->r_state == RT_CONSISTENT)
1017     {
1018 #ifdef SHARED
1019       /* Auditing checkpoint: we are going to add new objects.  */
1020       if ((mode & __RTLD_AUDIT) == 0
1021           && __builtin_expect (GLRO(dl_naudit) > 0, 0))
1022         {
1023           struct link_map *head = GL(dl_ns)[nsid]._ns_loaded;
1024           /* Do not call the functions for any auditing object.  */
1025           if (head->l_auditing == 0)
1026             {
1027               struct audit_ifaces *afct = GLRO(dl_audit);
1028               for (unsigned int cnt = 0; cnt < GLRO(dl_naudit); ++cnt)
1029                 {
1030                   if (afct->activity != NULL)
1031                     afct->activity (&head->l_audit[cnt].cookie, LA_ACT_ADD);
1032
1033                   afct = afct->next;
1034                 }
1035             }
1036         }
1037 #endif
1038
1039       /* Notify the debugger we have added some objects.  We need to
1040          call _dl_debug_initialize in a static program in case dynamic
1041          linking has not been used before.  */
1042       r->r_state = RT_ADD;
1043       _dl_debug_state ();
1044       make_consistent = true;
1045     }
1046   else
1047     assert (r->r_state == RT_ADD);
1048
1049   /* Enter the new object in the list of loaded objects.  */
1050   l = _dl_new_object (realname, name, l_type, loader, mode, nsid);
1051   if (__builtin_expect (l == NULL, 0))
1052     {
1053 #ifdef SHARED
1054     fail_new:
1055 #endif
1056       errstring = N_("cannot create shared object descriptor");
1057       goto call_lose_errno;
1058     }
1059
1060   /* Extract the remaining details we need from the ELF header
1061      and then read in the program header table.  */
1062   l->l_entry = header->e_entry;
1063   type = header->e_type;
1064   l->l_phnum = header->e_phnum;
1065
1066   maplength = header->e_phnum * sizeof (ElfW(Phdr));
1067   if (header->e_phoff + maplength <= (size_t) fbp->len)
1068     phdr = (void *) (fbp->buf + header->e_phoff);
1069   else
1070     {
1071       phdr = alloca (maplength);
1072       __lseek (fd, header->e_phoff, SEEK_SET);
1073       if ((size_t) __libc_read (fd, (void *) phdr, maplength) != maplength)
1074         {
1075           errstring = N_("cannot read file data");
1076           goto call_lose_errno;
1077         }
1078     }
1079
1080    /* On most platforms presume that PT_GNU_STACK is absent and the stack is
1081     * executable.  Other platforms default to a nonexecutable stack and don't
1082     * need PT_GNU_STACK to do so.  */
1083    uint_fast16_t stack_flags = DEFAULT_STACK_PERMS;
1084
1085   {
1086     /* Scan the program header table, collecting its load commands.  */
1087     struct loadcmd
1088       {
1089         ElfW(Addr) mapstart, mapend, dataend, allocend;
1090         off_t mapoff;
1091         int prot;
1092       } loadcmds[l->l_phnum], *c;
1093     size_t nloadcmds = 0;
1094     bool has_holes = false;
1095
1096     /* The struct is initialized to zero so this is not necessary:
1097     l->l_ld = 0;
1098     l->l_phdr = 0;
1099     l->l_addr = 0; */
1100     for (ph = phdr; ph < &phdr[l->l_phnum]; ++ph)
1101       switch (ph->p_type)
1102         {
1103           /* These entries tell us where to find things once the file's
1104              segments are mapped in.  We record the addresses it says
1105              verbatim, and later correct for the run-time load address.  */
1106         case PT_DYNAMIC:
1107           l->l_ld = (void *) ph->p_vaddr;
1108           l->l_ldnum = ph->p_memsz / sizeof (ElfW(Dyn));
1109           break;
1110
1111         case PT_PHDR:
1112           l->l_phdr = (void *) ph->p_vaddr;
1113           break;
1114
1115         case PT_LOAD:
1116           /* A load command tells us to map in part of the file.
1117              We record the load commands and process them all later.  */
1118           if (__builtin_expect ((ph->p_align & (GLRO(dl_pagesize) - 1)) != 0,
1119                                 0))
1120             {
1121               errstring = N_("ELF load command alignment not page-aligned");
1122               goto call_lose;
1123             }
1124           if (__builtin_expect (((ph->p_vaddr - ph->p_offset)
1125                                  & (ph->p_align - 1)) != 0, 0))
1126             {
1127               errstring
1128                 = N_("ELF load command address/offset not properly aligned");
1129               goto call_lose;
1130             }
1131
1132           c = &loadcmds[nloadcmds++];
1133           c->mapstart = ph->p_vaddr & ~(GLRO(dl_pagesize) - 1);
1134           c->mapend = ((ph->p_vaddr + ph->p_filesz + GLRO(dl_pagesize) - 1)
1135                        & ~(GLRO(dl_pagesize) - 1));
1136           c->dataend = ph->p_vaddr + ph->p_filesz;
1137           c->allocend = ph->p_vaddr + ph->p_memsz;
1138           c->mapoff = ph->p_offset & ~(GLRO(dl_pagesize) - 1);
1139
1140           /* Determine whether there is a gap between the last segment
1141              and this one.  */
1142           if (nloadcmds > 1 && c[-1].mapend != c->mapstart)
1143             has_holes = true;
1144
1145           /* Optimize a common case.  */
1146 #if (PF_R | PF_W | PF_X) == 7 && (PROT_READ | PROT_WRITE | PROT_EXEC) == 7
1147           c->prot = (PF_TO_PROT
1148                      >> ((ph->p_flags & (PF_R | PF_W | PF_X)) * 4)) & 0xf;
1149 #else
1150           c->prot = 0;
1151           if (ph->p_flags & PF_R)
1152             c->prot |= PROT_READ;
1153           if (ph->p_flags & PF_W)
1154             c->prot |= PROT_WRITE;
1155           if (ph->p_flags & PF_X)
1156             c->prot |= PROT_EXEC;
1157 #endif
1158           break;
1159
1160         case PT_TLS:
1161           if (ph->p_memsz == 0)
1162             /* Nothing to do for an empty segment.  */
1163             break;
1164
1165           l->l_tls_blocksize = ph->p_memsz;
1166           l->l_tls_align = ph->p_align;
1167           if (ph->p_align == 0)
1168             l->l_tls_firstbyte_offset = 0;
1169           else
1170             l->l_tls_firstbyte_offset = ph->p_vaddr & (ph->p_align - 1);
1171           l->l_tls_initimage_size = ph->p_filesz;
1172           /* Since we don't know the load address yet only store the
1173              offset.  We will adjust it later.  */
1174           l->l_tls_initimage = (void *) ph->p_vaddr;
1175
1176           /* If not loading the initial set of shared libraries,
1177              check whether we should permit loading a TLS segment.  */
1178           if (__builtin_expect (l->l_type == lt_library, 1)
1179               /* If GL(dl_tls_dtv_slotinfo_list) == NULL, then rtld.c did
1180                  not set up TLS data structures, so don't use them now.  */
1181               || __builtin_expect (GL(dl_tls_dtv_slotinfo_list) != NULL, 1))
1182             {
1183               /* Assign the next available module ID.  */
1184               l->l_tls_modid = _dl_next_tls_modid ();
1185               break;
1186             }
1187
1188 #ifdef SHARED
1189           if (l->l_prev == NULL || (mode & __RTLD_AUDIT) != 0)
1190             /* We are loading the executable itself when the dynamic linker
1191                was executed directly.  The setup will happen later.  */
1192             break;
1193
1194           /* In a static binary there is no way to tell if we dynamically
1195              loaded libpthread.  */
1196           if (GL(dl_error_catch_tsd) == &_dl_initial_error_catch_tsd)
1197 #endif
1198             {
1199               /* We have not yet loaded libpthread.
1200                  We can do the TLS setup right now!  */
1201
1202               void *tcb;
1203
1204               /* The first call allocates TLS bookkeeping data structures.
1205                  Then we allocate the TCB for the initial thread.  */
1206               if (__builtin_expect (_dl_tls_setup (), 0)
1207                   || __builtin_expect ((tcb = _dl_allocate_tls (NULL)) == NULL,
1208                                        0))
1209                 {
1210                   errval = ENOMEM;
1211                   errstring = N_("\
1212 cannot allocate TLS data structures for initial thread");
1213                   goto call_lose;
1214                 }
1215
1216               /* Now we install the TCB in the thread register.  */
1217               errstring = TLS_INIT_TP (tcb, 0);
1218               if (__builtin_expect (errstring == NULL, 1))
1219                 {
1220                   /* Now we are all good.  */
1221                   l->l_tls_modid = ++GL(dl_tls_max_dtv_idx);
1222                   break;
1223                 }
1224
1225               /* The kernel is too old or somesuch.  */
1226               errval = 0;
1227               _dl_deallocate_tls (tcb, 1);
1228               goto call_lose;
1229             }
1230
1231           /* Uh-oh, the binary expects TLS support but we cannot
1232              provide it.  */
1233           errval = 0;
1234           errstring = N_("cannot handle TLS data");
1235           goto call_lose;
1236           break;
1237
1238         case PT_GNU_STACK:
1239           stack_flags = ph->p_flags;
1240           break;
1241
1242         case PT_GNU_RELRO:
1243           l->l_relro_addr = ph->p_vaddr;
1244           l->l_relro_size = ph->p_memsz;
1245           break;
1246         }
1247
1248     if (__builtin_expect (nloadcmds == 0, 0))
1249       {
1250         /* This only happens for a bogus object that will be caught with
1251            another error below.  But we don't want to go through the
1252            calculations below using NLOADCMDS - 1.  */
1253         errstring = N_("object file has no loadable segments");
1254         goto call_lose;
1255       }
1256
1257     /* Now process the load commands and map segments into memory.  */
1258     c = loadcmds;
1259
1260     /* Length of the sections to be loaded.  */
1261     maplength = loadcmds[nloadcmds - 1].allocend - c->mapstart;
1262
1263     if (__builtin_expect (type, ET_DYN) == ET_DYN)
1264       {
1265         /* This is a position-independent shared object.  We can let the
1266            kernel map it anywhere it likes, but we must have space for all
1267            the segments in their specified positions relative to the first.
1268            So we map the first segment without MAP_FIXED, but with its
1269            extent increased to cover all the segments.  Then we remove
1270            access from excess portion, and there is known sufficient space
1271            there to remap from the later segments.
1272
1273            As a refinement, sometimes we have an address that we would
1274            prefer to map such objects at; but this is only a preference,
1275            the OS can do whatever it likes. */
1276         ElfW(Addr) mappref;
1277         mappref = (ELF_PREFERRED_ADDRESS (loader, maplength,
1278                                           c->mapstart & GLRO(dl_use_load_bias))
1279                    - MAP_BASE_ADDR (l));
1280
1281         /* Remember which part of the address space this object uses.  */
1282         l->l_map_start = (ElfW(Addr)) __mmap ((void *) mappref, maplength,
1283                                               c->prot,
1284                                               MAP_COPY|MAP_FILE,
1285                                               fd, c->mapoff);
1286         if (__builtin_expect ((void *) l->l_map_start == MAP_FAILED, 0))
1287           {
1288           map_error:
1289             errstring = N_("failed to map segment from shared object");
1290             goto call_lose_errno;
1291           }
1292
1293         l->l_map_end = l->l_map_start + maplength;
1294         l->l_addr = l->l_map_start - c->mapstart;
1295
1296         if (has_holes)
1297           /* Change protection on the excess portion to disallow all access;
1298              the portions we do not remap later will be inaccessible as if
1299              unallocated.  Then jump into the normal segment-mapping loop to
1300              handle the portion of the segment past the end of the file
1301              mapping.  */
1302           __mprotect ((caddr_t) (l->l_addr + c->mapend),
1303                       loadcmds[nloadcmds - 1].mapstart - c->mapend,
1304                       PROT_NONE);
1305
1306         l->l_contiguous = 1;
1307
1308         goto postmap;
1309       }
1310
1311     /* This object is loaded at a fixed address.  This must never
1312        happen for objects loaded with dlopen().  */
1313     if (__builtin_expect ((mode & __RTLD_OPENEXEC) == 0, 0))
1314       {
1315         errstring = N_("cannot dynamically load executable");
1316         goto call_lose;
1317       }
1318
1319     /* Notify ELF_PREFERRED_ADDRESS that we have to load this one
1320        fixed.  */
1321     ELF_FIXED_ADDRESS (loader, c->mapstart);
1322
1323
1324     /* Remember which part of the address space this object uses.  */
1325     l->l_map_start = c->mapstart + l->l_addr;
1326     l->l_map_end = l->l_map_start + maplength;
1327     l->l_contiguous = !has_holes;
1328
1329     while (c < &loadcmds[nloadcmds])
1330       {
1331         if (c->mapend > c->mapstart
1332             /* Map the segment contents from the file.  */
1333             && (__mmap ((void *) (l->l_addr + c->mapstart),
1334                         c->mapend - c->mapstart, c->prot,
1335                         MAP_FIXED|MAP_COPY|MAP_FILE,
1336                         fd, c->mapoff)
1337                 == MAP_FAILED))
1338           goto map_error;
1339
1340       postmap:
1341         if (c->prot & PROT_EXEC)
1342           l->l_text_end = l->l_addr + c->mapend;
1343
1344         if (l->l_phdr == 0
1345             && (ElfW(Off)) c->mapoff <= header->e_phoff
1346             && ((size_t) (c->mapend - c->mapstart + c->mapoff)
1347                 >= header->e_phoff + header->e_phnum * sizeof (ElfW(Phdr))))
1348           /* Found the program header in this segment.  */
1349           l->l_phdr = (void *) (c->mapstart + header->e_phoff - c->mapoff);
1350
1351         if (c->allocend > c->dataend)
1352           {
1353             /* Extra zero pages should appear at the end of this segment,
1354                after the data mapped from the file.   */
1355             ElfW(Addr) zero, zeroend, zeropage;
1356
1357             zero = l->l_addr + c->dataend;
1358             zeroend = l->l_addr + c->allocend;
1359             zeropage = ((zero + GLRO(dl_pagesize) - 1)
1360                         & ~(GLRO(dl_pagesize) - 1));
1361
1362             if (zeroend < zeropage)
1363               /* All the extra data is in the last page of the segment.
1364                  We can just zero it.  */
1365               zeropage = zeroend;
1366
1367             if (zeropage > zero)
1368               {
1369                 /* Zero the final part of the last page of the segment.  */
1370                 if (__builtin_expect ((c->prot & PROT_WRITE) == 0, 0))
1371                   {
1372                     /* Dag nab it.  */
1373                     if (__mprotect ((caddr_t) (zero
1374                                                & ~(GLRO(dl_pagesize) - 1)),
1375                                     GLRO(dl_pagesize), c->prot|PROT_WRITE) < 0)
1376                       {
1377                         errstring = N_("cannot change memory protections");
1378                         goto call_lose_errno;
1379                       }
1380                   }
1381                 memset ((void *) zero, '\0', zeropage - zero);
1382                 if (__builtin_expect ((c->prot & PROT_WRITE) == 0, 0))
1383                   __mprotect ((caddr_t) (zero & ~(GLRO(dl_pagesize) - 1)),
1384                               GLRO(dl_pagesize), c->prot);
1385               }
1386
1387             if (zeroend > zeropage)
1388               {
1389                 /* Map the remaining zero pages in from the zero fill FD.  */
1390                 caddr_t mapat;
1391                 mapat = __mmap ((caddr_t) zeropage, zeroend - zeropage,
1392                                 c->prot, MAP_ANON|MAP_PRIVATE|MAP_FIXED,
1393                                 -1, 0);
1394                 if (__builtin_expect (mapat == MAP_FAILED, 0))
1395                   {
1396                     errstring = N_("cannot map zero-fill pages");
1397                     goto call_lose_errno;
1398                   }
1399               }
1400           }
1401
1402         ++c;
1403       }
1404   }
1405
1406   if (l->l_ld == 0)
1407     {
1408       if (__builtin_expect (type == ET_DYN, 0))
1409         {
1410           errstring = N_("object file has no dynamic section");
1411           goto call_lose;
1412         }
1413     }
1414   else
1415     l->l_ld = (ElfW(Dyn) *) ((ElfW(Addr)) l->l_ld + l->l_addr);
1416
1417   elf_get_dynamic_info (l, NULL);
1418
1419   /* Make sure we are not dlopen'ing an object that has the
1420      DF_1_NOOPEN flag set.  */
1421   if (__builtin_expect (l->l_flags_1 & DF_1_NOOPEN, 0)
1422       && (mode & __RTLD_DLOPEN))
1423     {
1424       /* We are not supposed to load this object.  Free all resources.  */
1425       __munmap ((void *) l->l_map_start, l->l_map_end - l->l_map_start);
1426
1427       if (!l->l_libname->dont_free)
1428         free (l->l_libname);
1429
1430       if (l->l_phdr_allocated)
1431         free ((void *) l->l_phdr);
1432
1433       errstring = N_("shared object cannot be dlopen()ed");
1434       goto call_lose;
1435     }
1436
1437   if (l->l_phdr == NULL)
1438     {
1439       /* The program header is not contained in any of the segments.
1440          We have to allocate memory ourself and copy it over from out
1441          temporary place.  */
1442       ElfW(Phdr) *newp = (ElfW(Phdr) *) malloc (header->e_phnum
1443                                                 * sizeof (ElfW(Phdr)));
1444       if (newp == NULL)
1445         {
1446           errstring = N_("cannot allocate memory for program header");
1447           goto call_lose_errno;
1448         }
1449
1450       l->l_phdr = memcpy (newp, phdr,
1451                           (header->e_phnum * sizeof (ElfW(Phdr))));
1452       l->l_phdr_allocated = 1;
1453     }
1454   else
1455     /* Adjust the PT_PHDR value by the runtime load address.  */
1456     l->l_phdr = (ElfW(Phdr) *) ((ElfW(Addr)) l->l_phdr + l->l_addr);
1457
1458   if (__builtin_expect ((stack_flags &~ GL(dl_stack_flags)) & PF_X, 0))
1459     {
1460       if (__builtin_expect (__check_caller (RETURN_ADDRESS (0), allow_ldso),
1461                             0) != 0)
1462         {
1463           errstring = N_("invalid caller");
1464           goto call_lose;
1465         }
1466
1467       /* The stack is presently not executable, but this module
1468          requires that it be executable.  We must change the
1469          protection of the variable which contains the flags used in
1470          the mprotect calls.  */
1471 #ifdef SHARED
1472       if ((mode & (__RTLD_DLOPEN | __RTLD_AUDIT)) == __RTLD_DLOPEN)
1473         {
1474           const uintptr_t p = (uintptr_t) &__stack_prot & -GLRO(dl_pagesize);
1475           const size_t s = (uintptr_t) (&__stack_prot + 1) - p;
1476
1477           struct link_map *const m = &GL(dl_rtld_map);
1478           const uintptr_t relro_end = ((m->l_addr + m->l_relro_addr
1479                                         + m->l_relro_size)
1480                                        & -GLRO(dl_pagesize));
1481           if (__builtin_expect (p + s <= relro_end, 1))
1482             {
1483               /* The variable lies in the region protected by RELRO.  */
1484               __mprotect ((void *) p, s, PROT_READ|PROT_WRITE);
1485               __stack_prot |= PROT_READ|PROT_WRITE|PROT_EXEC;
1486               __mprotect ((void *) p, s, PROT_READ);
1487             }
1488           else
1489             __stack_prot |= PROT_READ|PROT_WRITE|PROT_EXEC;
1490         }
1491       else
1492 #endif
1493         __stack_prot |= PROT_READ|PROT_WRITE|PROT_EXEC;
1494
1495 #ifdef check_consistency
1496       check_consistency ();
1497 #endif
1498
1499       errval = (*GL(dl_make_stack_executable_hook)) (stack_endp);
1500       if (errval)
1501         {
1502           errstring = N_("\
1503 cannot enable executable stack as shared object requires");
1504           goto call_lose;
1505         }
1506     }
1507
1508   /* Adjust the address of the TLS initialization image.  */
1509   if (l->l_tls_initimage != NULL)
1510     l->l_tls_initimage = (char *) l->l_tls_initimage + l->l_addr;
1511
1512   /* We are done mapping in the file.  We no longer need the descriptor.  */
1513   if (__builtin_expect (__close (fd) != 0, 0))
1514     {
1515       errstring = N_("cannot close file descriptor");
1516       goto call_lose_errno;
1517     }
1518   /* Signal that we closed the file.  */
1519   fd = -1;
1520
1521   if (l->l_type == lt_library && type == ET_EXEC)
1522     l->l_type = lt_executable;
1523
1524   l->l_entry += l->l_addr;
1525
1526   if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_FILES, 0))
1527     _dl_debug_printf ("\
1528   dynamic: 0x%0*lx  base: 0x%0*lx   size: 0x%0*Zx\n\
1529     entry: 0x%0*lx  phdr: 0x%0*lx  phnum:   %*u\n\n",
1530                            (int) sizeof (void *) * 2,
1531                            (unsigned long int) l->l_ld,
1532                            (int) sizeof (void *) * 2,
1533                            (unsigned long int) l->l_addr,
1534                            (int) sizeof (void *) * 2, maplength,
1535                            (int) sizeof (void *) * 2,
1536                            (unsigned long int) l->l_entry,
1537                            (int) sizeof (void *) * 2,
1538                            (unsigned long int) l->l_phdr,
1539                            (int) sizeof (void *) * 2, l->l_phnum);
1540
1541   /* Set up the symbol hash table.  */
1542   _dl_setup_hash (l);
1543
1544   /* If this object has DT_SYMBOLIC set modify now its scope.  We don't
1545      have to do this for the main map.  */
1546   if ((mode & RTLD_DEEPBIND) == 0
1547       && __builtin_expect (l->l_info[DT_SYMBOLIC] != NULL, 0)
1548       && &l->l_searchlist != l->l_scope[0])
1549     {
1550       /* Create an appropriate searchlist.  It contains only this map.
1551          This is the definition of DT_SYMBOLIC in SysVr4.  */
1552       l->l_symbolic_searchlist.r_list[0] = l;
1553       l->l_symbolic_searchlist.r_nlist = 1;
1554
1555       /* Now move the existing entries one back.  */
1556       memmove (&l->l_scope[1], &l->l_scope[0],
1557                (l->l_scope_max - 1) * sizeof (l->l_scope[0]));
1558
1559       /* Now add the new entry.  */
1560       l->l_scope[0] = &l->l_symbolic_searchlist;
1561     }
1562
1563   /* Remember whether this object must be initialized first.  */
1564   if (l->l_flags_1 & DF_1_INITFIRST)
1565     GL(dl_initfirst) = l;
1566
1567   /* Finally the file information.  */
1568   l->l_dev = st.st_dev;
1569   l->l_ino = st.st_ino;
1570
1571   /* When we profile the SONAME might be needed for something else but
1572      loading.  Add it right away.  */
1573   if (__builtin_expect (GLRO(dl_profile) != NULL, 0)
1574       && l->l_info[DT_SONAME] != NULL)
1575     add_name_to_object (l, ((const char *) D_PTR (l, l_info[DT_STRTAB])
1576                             + l->l_info[DT_SONAME]->d_un.d_val));
1577
1578   /* Now that the object is fully initialized add it to the object list.  */
1579   _dl_add_to_namespace_list (l, nsid);
1580
1581 #ifdef SHARED
1582   /* Auditing checkpoint: we have a new object.  */
1583   if (__builtin_expect (GLRO(dl_naudit) > 0, 0)
1584       && !GL(dl_ns)[l->l_ns]._ns_loaded->l_auditing)
1585     {
1586       struct audit_ifaces *afct = GLRO(dl_audit);
1587       for (unsigned int cnt = 0; cnt < GLRO(dl_naudit); ++cnt)
1588         {
1589           if (afct->objopen != NULL)
1590             {
1591               l->l_audit[cnt].bindflags
1592                 = afct->objopen (l, nsid, &l->l_audit[cnt].cookie);
1593
1594               l->l_audit_any_plt |= l->l_audit[cnt].bindflags != 0;
1595             }
1596
1597           afct = afct->next;
1598         }
1599     }
1600 #endif
1601
1602   return l;
1603 }
1604 \f
1605 /* Print search path.  */
1606 static void
1607 print_search_path (struct r_search_path_elem **list,
1608                    const char *what, const char *name)
1609 {
1610   char buf[max_dirnamelen + max_capstrlen];
1611   int first = 1;
1612
1613   _dl_debug_printf (" search path=");
1614
1615   while (*list != NULL && (*list)->what == what) /* Yes, ==.  */
1616     {
1617       char *endp = __mempcpy (buf, (*list)->dirname, (*list)->dirnamelen);
1618       size_t cnt;
1619
1620       for (cnt = 0; cnt < ncapstr; ++cnt)
1621         if ((*list)->status[cnt] != nonexisting)
1622           {
1623             char *cp = __mempcpy (endp, capstr[cnt].str, capstr[cnt].len);
1624             if (cp == buf || (cp == buf + 1 && buf[0] == '/'))
1625               cp[0] = '\0';
1626             else
1627               cp[-1] = '\0';
1628
1629             _dl_debug_printf_c (first ? "%s" : ":%s", buf);
1630             first = 0;
1631           }
1632
1633       ++list;
1634     }
1635
1636   if (name != NULL)
1637     _dl_debug_printf_c ("\t\t(%s from file %s)\n", what,
1638                         name[0] ? name : rtld_progname);
1639   else
1640     _dl_debug_printf_c ("\t\t(%s)\n", what);
1641 }
1642 \f
1643 /* Open a file and verify it is an ELF file for this architecture.  We
1644    ignore only ELF files for other architectures.  Non-ELF files and
1645    ELF files with different header information cause fatal errors since
1646    this could mean there is something wrong in the installation and the
1647    user might want to know about this.  */
1648 static int
1649 open_verify (const char *name, struct filebuf *fbp, struct link_map *loader,
1650              int whatcode, bool *found_other_class, bool free_name)
1651 {
1652   /* This is the expected ELF header.  */
1653 #define ELF32_CLASS ELFCLASS32
1654 #define ELF64_CLASS ELFCLASS64
1655 #ifndef VALID_ELF_HEADER
1656 # define VALID_ELF_HEADER(hdr,exp,size) (memcmp (hdr, exp, size) == 0)
1657 # define VALID_ELF_OSABI(osabi)         (osabi == ELFOSABI_SYSV)
1658 # define VALID_ELF_ABIVERSION(osabi,ver) (ver == 0)
1659 #elif defined MORE_ELF_HEADER_DATA
1660   MORE_ELF_HEADER_DATA;
1661 #endif
1662   static const unsigned char expected[EI_NIDENT] =
1663   {
1664     [EI_MAG0] = ELFMAG0,
1665     [EI_MAG1] = ELFMAG1,
1666     [EI_MAG2] = ELFMAG2,
1667     [EI_MAG3] = ELFMAG3,
1668     [EI_CLASS] = ELFW(CLASS),
1669     [EI_DATA] = byteorder,
1670     [EI_VERSION] = EV_CURRENT,
1671     [EI_OSABI] = ELFOSABI_SYSV,
1672     [EI_ABIVERSION] = 0
1673   };
1674   static const struct
1675   {
1676     ElfW(Word) vendorlen;
1677     ElfW(Word) datalen;
1678     ElfW(Word) type;
1679     char vendor[4];
1680   } expected_note = { 4, 16, 1, "GNU" };
1681   /* Initialize it to make the compiler happy.  */
1682   const char *errstring = NULL;
1683   int errval = 0;
1684
1685 #ifdef SHARED
1686   /* Give the auditing libraries a chance.  */
1687   if (__builtin_expect (GLRO(dl_naudit) > 0, 0) && whatcode != 0
1688       && loader->l_auditing == 0)
1689     {
1690       struct audit_ifaces *afct = GLRO(dl_audit);
1691       for (unsigned int cnt = 0; cnt < GLRO(dl_naudit); ++cnt)
1692         {
1693           if (afct->objsearch != NULL)
1694             {
1695               name = afct->objsearch (name, &loader->l_audit[cnt].cookie,
1696                                       whatcode);
1697               if (name == NULL)
1698                 /* Ignore the path.  */
1699                 return -1;
1700             }
1701
1702           afct = afct->next;
1703         }
1704     }
1705 #endif
1706
1707   /* Open the file.  We always open files read-only.  */
1708   int fd = __open (name, O_RDONLY | O_CLOEXEC);
1709   if (fd != -1)
1710     {
1711       ElfW(Ehdr) *ehdr;
1712       ElfW(Phdr) *phdr, *ph;
1713       ElfW(Word) *abi_note;
1714       unsigned int osversion;
1715       size_t maplength;
1716
1717       /* We successfully openened the file.  Now verify it is a file
1718          we can use.  */
1719       __set_errno (0);
1720       fbp->len = __libc_read (fd, fbp->buf, sizeof (fbp->buf));
1721
1722       /* This is where the ELF header is loaded.  */
1723       assert (sizeof (fbp->buf) > sizeof (ElfW(Ehdr)));
1724       ehdr = (ElfW(Ehdr) *) fbp->buf;
1725
1726       /* Now run the tests.  */
1727       if (__builtin_expect (fbp->len < (ssize_t) sizeof (ElfW(Ehdr)), 0))
1728         {
1729           errval = errno;
1730           errstring = (errval == 0
1731                        ? N_("file too short") : N_("cannot read file data"));
1732         call_lose:
1733           if (free_name)
1734             {
1735               char *realname = (char *) name;
1736               name = strdupa (realname);
1737               free (realname);
1738             }
1739           lose (errval, fd, name, NULL, NULL, errstring, NULL);
1740         }
1741
1742       /* See whether the ELF header is what we expect.  */
1743       if (__builtin_expect (! VALID_ELF_HEADER (ehdr->e_ident, expected,
1744                                                 EI_ABIVERSION)
1745                             || !VALID_ELF_ABIVERSION (ehdr->e_ident[EI_OSABI],
1746                                                       ehdr->e_ident[EI_ABIVERSION])
1747                             || memcmp (&ehdr->e_ident[EI_PAD],
1748                                        &expected[EI_PAD],
1749                                        EI_NIDENT - EI_PAD) != 0,
1750                             0))
1751         {
1752           /* Something is wrong.  */
1753           const Elf32_Word *magp = (const void *) ehdr->e_ident;
1754           if (*magp !=
1755 #if BYTE_ORDER == LITTLE_ENDIAN
1756               ((ELFMAG0 << (EI_MAG0 * 8)) |
1757                (ELFMAG1 << (EI_MAG1 * 8)) |
1758                (ELFMAG2 << (EI_MAG2 * 8)) |
1759                (ELFMAG3 << (EI_MAG3 * 8)))
1760 #else
1761               ((ELFMAG0 << (EI_MAG3 * 8)) |
1762                (ELFMAG1 << (EI_MAG2 * 8)) |
1763                (ELFMAG2 << (EI_MAG1 * 8)) |
1764                (ELFMAG3 << (EI_MAG0 * 8)))
1765 #endif
1766               )
1767             errstring = N_("invalid ELF header");
1768           else if (ehdr->e_ident[EI_CLASS] != ELFW(CLASS))
1769             {
1770               /* This is not a fatal error.  On architectures where
1771                  32-bit and 64-bit binaries can be run this might
1772                  happen.  */
1773               *found_other_class = true;
1774               goto close_and_out;
1775             }
1776           else if (ehdr->e_ident[EI_DATA] != byteorder)
1777             {
1778               if (BYTE_ORDER == BIG_ENDIAN)
1779                 errstring = N_("ELF file data encoding not big-endian");
1780               else
1781                 errstring = N_("ELF file data encoding not little-endian");
1782             }
1783           else if (ehdr->e_ident[EI_VERSION] != EV_CURRENT)
1784             errstring
1785               = N_("ELF file version ident does not match current one");
1786           /* XXX We should be able so set system specific versions which are
1787              allowed here.  */
1788           else if (!VALID_ELF_OSABI (ehdr->e_ident[EI_OSABI]))
1789             errstring = N_("ELF file OS ABI invalid");
1790           else if (!VALID_ELF_ABIVERSION (ehdr->e_ident[EI_OSABI],
1791                                           ehdr->e_ident[EI_ABIVERSION]))
1792             errstring = N_("ELF file ABI version invalid");
1793           else if (memcmp (&ehdr->e_ident[EI_PAD], &expected[EI_PAD],
1794                            EI_NIDENT - EI_PAD) != 0)
1795             errstring = N_("nonzero padding in e_ident");
1796           else
1797             /* Otherwise we don't know what went wrong.  */
1798             errstring = N_("internal error");
1799
1800           goto call_lose;
1801         }
1802
1803       if (__builtin_expect (ehdr->e_version, EV_CURRENT) != EV_CURRENT)
1804         {
1805           errstring = N_("ELF file version does not match current one");
1806           goto call_lose;
1807         }
1808       if (! __builtin_expect (elf_machine_matches_host (ehdr), 1))
1809         goto close_and_out;
1810       else if (__builtin_expect (ehdr->e_type, ET_DYN) != ET_DYN
1811                && __builtin_expect (ehdr->e_type, ET_EXEC) != ET_EXEC)
1812         {
1813           errstring = N_("only ET_DYN and ET_EXEC can be loaded");
1814           goto call_lose;
1815         }
1816       else if (__builtin_expect (ehdr->e_phentsize, sizeof (ElfW(Phdr)))
1817                != sizeof (ElfW(Phdr)))
1818         {
1819           errstring = N_("ELF file's phentsize not the expected size");
1820           goto call_lose;
1821         }
1822
1823       maplength = ehdr->e_phnum * sizeof (ElfW(Phdr));
1824       if (ehdr->e_phoff + maplength <= (size_t) fbp->len)
1825         phdr = (void *) (fbp->buf + ehdr->e_phoff);
1826       else
1827         {
1828           phdr = alloca (maplength);
1829           __lseek (fd, ehdr->e_phoff, SEEK_SET);
1830           if ((size_t) __libc_read (fd, (void *) phdr, maplength) != maplength)
1831             {
1832             read_error:
1833               errval = errno;
1834               errstring = N_("cannot read file data");
1835               goto call_lose;
1836             }
1837         }
1838
1839       /* Check .note.ABI-tag if present.  */
1840       for (ph = phdr; ph < &phdr[ehdr->e_phnum]; ++ph)
1841         if (ph->p_type == PT_NOTE && ph->p_filesz >= 32 && ph->p_align >= 4)
1842           {
1843             ElfW(Addr) size = ph->p_filesz;
1844
1845             if (ph->p_offset + size <= (size_t) fbp->len)
1846               abi_note = (void *) (fbp->buf + ph->p_offset);
1847             else
1848               {
1849                 abi_note = alloca (size);
1850                 __lseek (fd, ph->p_offset, SEEK_SET);
1851                 if (__libc_read (fd, (void *) abi_note, size) != size)
1852                   goto read_error;
1853               }
1854
1855             while (memcmp (abi_note, &expected_note, sizeof (expected_note)))
1856               {
1857 #define ROUND(len) (((len) + sizeof (ElfW(Word)) - 1) & -sizeof (ElfW(Word)))
1858                 ElfW(Addr) note_size = 3 * sizeof (ElfW(Word))
1859                                        + ROUND (abi_note[0])
1860                                        + ROUND (abi_note[1]);
1861
1862                 if (size - 32 < note_size)
1863                   {
1864                     size = 0;
1865                     break;
1866                   }
1867                 size -= note_size;
1868                 abi_note = (void *) abi_note + note_size;
1869               }
1870
1871             if (size == 0)
1872               continue;
1873
1874             osversion = (abi_note[5] & 0xff) * 65536
1875                         + (abi_note[6] & 0xff) * 256
1876                         + (abi_note[7] & 0xff);
1877             if (abi_note[4] != __ABI_TAG_OS
1878                 || (GLRO(dl_osversion) && GLRO(dl_osversion) < osversion))
1879               {
1880               close_and_out:
1881                 __close (fd);
1882                 __set_errno (ENOENT);
1883                 fd = -1;
1884               }
1885
1886             break;
1887           }
1888     }
1889
1890   return fd;
1891 }
1892 \f
1893 /* Try to open NAME in one of the directories in *DIRSP.
1894    Return the fd, or -1.  If successful, fill in *REALNAME
1895    with the malloc'd full directory name.  If it turns out
1896    that none of the directories in *DIRSP exists, *DIRSP is
1897    replaced with (void *) -1, and the old value is free()d
1898    if MAY_FREE_DIRS is true.  */
1899
1900 static int
1901 open_path (const char *name, size_t namelen, int secure,
1902            struct r_search_path_struct *sps, char **realname,
1903            struct filebuf *fbp, struct link_map *loader, int whatcode,
1904            bool *found_other_class)
1905 {
1906   struct r_search_path_elem **dirs = sps->dirs;
1907   char *buf;
1908   int fd = -1;
1909   const char *current_what = NULL;
1910   int any = 0;
1911
1912   if (__builtin_expect (dirs == NULL, 0))
1913     /* We're called before _dl_init_paths when loading the main executable
1914        given on the command line when rtld is run directly.  */
1915     return -1;
1916
1917   buf = alloca (max_dirnamelen + max_capstrlen + namelen);
1918   do
1919     {
1920       struct r_search_path_elem *this_dir = *dirs;
1921       size_t buflen = 0;
1922       size_t cnt;
1923       char *edp;
1924       int here_any = 0;
1925       int err;
1926
1927       /* If we are debugging the search for libraries print the path
1928          now if it hasn't happened now.  */
1929       if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_LIBS, 0)
1930           && current_what != this_dir->what)
1931         {
1932           current_what = this_dir->what;
1933           print_search_path (dirs, current_what, this_dir->where);
1934         }
1935
1936       edp = (char *) __mempcpy (buf, this_dir->dirname, this_dir->dirnamelen);
1937       for (cnt = 0; fd == -1 && cnt < ncapstr; ++cnt)
1938         {
1939           /* Skip this directory if we know it does not exist.  */
1940           if (this_dir->status[cnt] == nonexisting)
1941             continue;
1942
1943           buflen =
1944             ((char *) __mempcpy (__mempcpy (edp, capstr[cnt].str,
1945                                             capstr[cnt].len),
1946                                  name, namelen)
1947              - buf);
1948
1949           /* Print name we try if this is wanted.  */
1950           if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_LIBS, 0))
1951             _dl_debug_printf ("  trying file=%s\n", buf);
1952
1953           fd = open_verify (buf, fbp, loader, whatcode, found_other_class,
1954                             false);
1955           if (this_dir->status[cnt] == unknown)
1956             {
1957               if (fd != -1)
1958                 this_dir->status[cnt] = existing;
1959               /* Do not update the directory information when loading
1960                  auditing code.  We must try to disturb the program as
1961                  little as possible.  */
1962               else if (loader == NULL
1963                        || GL(dl_ns)[loader->l_ns]._ns_loaded->l_auditing == 0)
1964                 {
1965                   /* We failed to open machine dependent library.  Let's
1966                      test whether there is any directory at all.  */
1967                   struct stat64 st;
1968
1969                   buf[buflen - namelen - 1] = '\0';
1970
1971                   if (__xstat64 (_STAT_VER, buf, &st) != 0
1972                       || ! S_ISDIR (st.st_mode))
1973                     /* The directory does not exist or it is no directory.  */
1974                     this_dir->status[cnt] = nonexisting;
1975                   else
1976                     this_dir->status[cnt] = existing;
1977                 }
1978             }
1979
1980           /* Remember whether we found any existing directory.  */
1981           here_any |= this_dir->status[cnt] != nonexisting;
1982
1983           if (fd != -1 && __builtin_expect (secure, 0)
1984               && INTUSE(__libc_enable_secure))
1985             {
1986               /* This is an extra security effort to make sure nobody can
1987                  preload broken shared objects which are in the trusted
1988                  directories and so exploit the bugs.  */
1989               struct stat64 st;
1990
1991               if (__fxstat64 (_STAT_VER, fd, &st) != 0
1992                   || (st.st_mode & S_ISUID) == 0)
1993                 {
1994                   /* The shared object cannot be tested for being SUID
1995                      or this bit is not set.  In this case we must not
1996                      use this object.  */
1997                   __close (fd);
1998                   fd = -1;
1999                   /* We simply ignore the file, signal this by setting
2000                      the error value which would have been set by `open'.  */
2001                   errno = ENOENT;
2002                 }
2003             }
2004         }
2005
2006       if (fd != -1)
2007         {
2008           *realname = (char *) malloc (buflen);
2009           if (*realname != NULL)
2010             {
2011               memcpy (*realname, buf, buflen);
2012               return fd;
2013             }
2014           else
2015             {
2016               /* No memory for the name, we certainly won't be able
2017                  to load and link it.  */
2018               __close (fd);
2019               return -1;
2020             }
2021         }
2022       if (here_any && (err = errno) != ENOENT && err != EACCES)
2023         /* The file exists and is readable, but something went wrong.  */
2024         return -1;
2025
2026       /* Remember whether we found anything.  */
2027       any |= here_any;
2028     }
2029   while (*++dirs != NULL);
2030
2031   /* Remove the whole path if none of the directories exists.  */
2032   if (__builtin_expect (! any, 0))
2033     {
2034       /* Paths which were allocated using the minimal malloc() in ld.so
2035          must not be freed using the general free() in libc.  */
2036       if (sps->malloced)
2037         free (sps->dirs);
2038
2039       /* rtld_search_dirs is attribute_relro, therefore avoid writing
2040          into it.  */
2041       if (sps != &rtld_search_dirs)
2042         sps->dirs = (void *) -1;
2043     }
2044
2045   return -1;
2046 }
2047
2048 /* Map in the shared object file NAME.  */
2049
2050 struct link_map *
2051 internal_function
2052 _dl_map_object (struct link_map *loader, const char *name,
2053                 int type, int trace_mode, int mode, Lmid_t nsid)
2054 {
2055   int fd;
2056   char *realname;
2057   char *name_copy;
2058   struct link_map *l;
2059   struct filebuf fb;
2060
2061   assert (nsid >= 0);
2062   assert (nsid < GL(dl_nns));
2063
2064   /* Look for this name among those already loaded.  */
2065   for (l = GL(dl_ns)[nsid]._ns_loaded; l; l = l->l_next)
2066     {
2067       /* If the requested name matches the soname of a loaded object,
2068          use that object.  Elide this check for names that have not
2069          yet been opened.  */
2070       if (__builtin_expect (l->l_faked, 0) != 0
2071           || __builtin_expect (l->l_removed, 0) != 0)
2072         continue;
2073       if (!_dl_name_match_p (name, l))
2074         {
2075           const char *soname;
2076
2077           if (__builtin_expect (l->l_soname_added, 1)
2078               || l->l_info[DT_SONAME] == NULL)
2079             continue;
2080
2081           soname = ((const char *) D_PTR (l, l_info[DT_STRTAB])
2082                     + l->l_info[DT_SONAME]->d_un.d_val);
2083           if (strcmp (name, soname) != 0)
2084             continue;
2085
2086           /* We have a match on a new name -- cache it.  */
2087           add_name_to_object (l, soname);
2088           l->l_soname_added = 1;
2089         }
2090
2091       /* We have a match.  */
2092       return l;
2093     }
2094
2095   /* Display information if we are debugging.  */
2096   if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_FILES, 0)
2097       && loader != NULL)
2098     _dl_debug_printf ((mode & __RTLD_CALLMAP) == 0
2099                       ? "\nfile=%s [%lu];  needed by %s [%lu]\n"
2100                       : "\nfile=%s [%lu];  dynamically loaded by %s [%lu]\n",
2101                       name, nsid, loader->l_name[0]
2102                       ? loader->l_name : rtld_progname, loader->l_ns);
2103
2104 #ifdef SHARED
2105   /* Give the auditing libraries a chance to change the name before we
2106      try anything.  */
2107   if (__builtin_expect (GLRO(dl_naudit) > 0, 0)
2108       && (loader == NULL || loader->l_auditing == 0))
2109     {
2110       struct audit_ifaces *afct = GLRO(dl_audit);
2111       for (unsigned int cnt = 0; cnt < GLRO(dl_naudit); ++cnt)
2112         {
2113           if (afct->objsearch != NULL)
2114             {
2115               name = afct->objsearch (name, &loader->l_audit[cnt].cookie,
2116                                       LA_SER_ORIG);
2117               if (name == NULL)
2118                 {
2119                   /* Do not try anything further.  */
2120                   fd = -1;
2121                   goto no_file;
2122                 }
2123             }
2124
2125           afct = afct->next;
2126         }
2127     }
2128 #endif
2129
2130   /* Will be true if we found a DSO which is of the other ELF class.  */
2131   bool found_other_class = false;
2132
2133   if (strchr (name, '/') == NULL)
2134     {
2135       /* Search for NAME in several places.  */
2136
2137       size_t namelen = strlen (name) + 1;
2138
2139       if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_LIBS, 0))
2140         _dl_debug_printf ("find library=%s [%lu]; searching\n", name, nsid);
2141
2142       fd = -1;
2143
2144       /* When the object has the RUNPATH information we don't use any
2145          RPATHs.  */
2146       if (loader == NULL || loader->l_info[DT_RUNPATH] == NULL)
2147         {
2148           /* This is the executable's map (if there is one).  Make sure that
2149              we do not look at it twice.  */
2150           struct link_map *main_map = GL(dl_ns)[LM_ID_BASE]._ns_loaded;
2151           bool did_main_map = false;
2152
2153           /* First try the DT_RPATH of the dependent object that caused NAME
2154              to be loaded.  Then that object's dependent, and on up.  */
2155           for (l = loader; l; l = l->l_loader)
2156             if (cache_rpath (l, &l->l_rpath_dirs, DT_RPATH, "RPATH"))
2157               {
2158                 fd = open_path (name, namelen, mode & __RTLD_SECURE,
2159                                 &l->l_rpath_dirs,
2160                                 &realname, &fb, loader, LA_SER_RUNPATH,
2161                                 &found_other_class);
2162                 if (fd != -1)
2163                   break;
2164
2165                 did_main_map |= l == main_map;
2166               }
2167
2168           /* If dynamically linked, try the DT_RPATH of the executable
2169              itself.  NB: we do this for lookups in any namespace.  */
2170           if (fd == -1 && !did_main_map
2171               && main_map != NULL && main_map->l_type != lt_loaded
2172               && cache_rpath (main_map, &main_map->l_rpath_dirs, DT_RPATH,
2173                               "RPATH"))
2174             fd = open_path (name, namelen, mode & __RTLD_SECURE,
2175                             &main_map->l_rpath_dirs,
2176                             &realname, &fb, loader ?: main_map, LA_SER_RUNPATH,
2177                             &found_other_class);
2178         }
2179
2180       /* Try the LD_LIBRARY_PATH environment variable.  */
2181       if (fd == -1 && env_path_list.dirs != (void *) -1)
2182         fd = open_path (name, namelen, mode & __RTLD_SECURE, &env_path_list,
2183                         &realname, &fb,
2184                         loader ?: GL(dl_ns)[LM_ID_BASE]._ns_loaded,
2185                         LA_SER_LIBPATH, &found_other_class);
2186
2187       /* Look at the RUNPATH information for this binary.  */
2188       if (fd == -1 && loader != NULL
2189           && cache_rpath (loader, &loader->l_runpath_dirs,
2190                           DT_RUNPATH, "RUNPATH"))
2191         fd = open_path (name, namelen, mode & __RTLD_SECURE,
2192                         &loader->l_runpath_dirs, &realname, &fb, loader,
2193                         LA_SER_RUNPATH, &found_other_class);
2194
2195       if (fd == -1
2196           && (__builtin_expect (! (mode & __RTLD_SECURE), 1)
2197               || ! INTUSE(__libc_enable_secure))
2198           && __builtin_expect (GLRO(dl_inhibit_cache) == 0, 1))
2199         {
2200           /* Check the list of libraries in the file /etc/ld.so.cache,
2201              for compatibility with Linux's ldconfig program.  */
2202           const char *cached = _dl_load_cache_lookup (name);
2203
2204           if (cached != NULL)
2205             {
2206 #ifdef SHARED
2207               // XXX Correct to unconditionally default to namespace 0?
2208               l = (loader
2209                    ?: GL(dl_ns)[LM_ID_BASE]._ns_loaded
2210                    ?: &GL(dl_rtld_map));
2211 #else
2212               l = loader;
2213 #endif
2214
2215               /* If the loader has the DF_1_NODEFLIB flag set we must not
2216                  use a cache entry from any of these directories.  */
2217               if (
2218 #ifndef SHARED
2219                   /* 'l' is always != NULL for dynamically linked objects.  */
2220                   l != NULL &&
2221 #endif
2222                   __builtin_expect (l->l_flags_1 & DF_1_NODEFLIB, 0))
2223                 {
2224                   const char *dirp = system_dirs;
2225                   unsigned int cnt = 0;
2226
2227                   do
2228                     {
2229                       if (memcmp (cached, dirp, system_dirs_len[cnt]) == 0)
2230                         {
2231                           /* The prefix matches.  Don't use the entry.  */
2232                           cached = NULL;
2233                           break;
2234                         }
2235
2236                       dirp += system_dirs_len[cnt] + 1;
2237                       ++cnt;
2238                     }
2239                   while (cnt < nsystem_dirs_len);
2240                 }
2241
2242               if (cached != NULL)
2243                 {
2244                   fd = open_verify (cached,
2245                                     &fb, loader ?: GL(dl_ns)[nsid]._ns_loaded,
2246                                     LA_SER_CONFIG, &found_other_class, false);
2247                   if (__builtin_expect (fd != -1, 1))
2248                     {
2249                       realname = local_strdup (cached);
2250                       if (realname == NULL)
2251                         {
2252                           __close (fd);
2253                           fd = -1;
2254                         }
2255                     }
2256                 }
2257             }
2258         }
2259
2260       /* Finally, try the default path.  */
2261       if (fd == -1
2262           && ((l = loader ?: GL(dl_ns)[nsid]._ns_loaded) == NULL
2263               || __builtin_expect (!(l->l_flags_1 & DF_1_NODEFLIB), 1))
2264           && rtld_search_dirs.dirs != (void *) -1)
2265         fd = open_path (name, namelen, mode & __RTLD_SECURE, &rtld_search_dirs,
2266                         &realname, &fb, l, LA_SER_DEFAULT, &found_other_class);
2267
2268       /* Add another newline when we are tracing the library loading.  */
2269       if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_LIBS, 0))
2270         _dl_debug_printf ("\n");
2271     }
2272   else
2273     {
2274       /* The path may contain dynamic string tokens.  */
2275       realname = (loader
2276                   ? expand_dynamic_string_token (loader, name, 0)
2277                   : local_strdup (name));
2278       if (realname == NULL)
2279         fd = -1;
2280       else
2281         {
2282           fd = open_verify (realname, &fb,
2283                             loader ?: GL(dl_ns)[nsid]._ns_loaded, 0,
2284                             &found_other_class, true);
2285           if (__builtin_expect (fd, 0) == -1)
2286             free (realname);
2287         }
2288     }
2289
2290 #ifdef SHARED
2291  no_file:
2292 #endif
2293   /* In case the LOADER information has only been provided to get to
2294      the appropriate RUNPATH/RPATH information we do not need it
2295      anymore.  */
2296   if (mode & __RTLD_CALLMAP)
2297     loader = NULL;
2298
2299   if (__builtin_expect (fd, 0) == -1)
2300     {
2301       if (trace_mode
2302           && __builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_PRELINK, 0) == 0)
2303         {
2304           /* We haven't found an appropriate library.  But since we
2305              are only interested in the list of libraries this isn't
2306              so severe.  Fake an entry with all the information we
2307              have.  */
2308           static const Elf_Symndx dummy_bucket = STN_UNDEF;
2309
2310           /* Allocate a new object map.  */
2311           if ((name_copy = local_strdup (name)) == NULL
2312               || (l = _dl_new_object (name_copy, name, type, loader,
2313                                       mode, nsid)) == NULL)
2314             {
2315               free (name_copy);
2316               _dl_signal_error (ENOMEM, name, NULL,
2317                                 N_("cannot create shared object descriptor"));
2318             }
2319           /* Signal that this is a faked entry.  */
2320           l->l_faked = 1;
2321           /* Since the descriptor is initialized with zero we do not
2322              have do this here.
2323           l->l_reserved = 0; */
2324           l->l_buckets = &dummy_bucket;
2325           l->l_nbuckets = 1;
2326           l->l_relocated = 1;
2327
2328           /* Enter the object in the object list.  */
2329           _dl_add_to_namespace_list (l, nsid);
2330
2331           return l;
2332         }
2333       else if (found_other_class)
2334         _dl_signal_error (0, name, NULL,
2335                           ELFW(CLASS) == ELFCLASS32
2336                           ? N_("wrong ELF class: ELFCLASS64")
2337                           : N_("wrong ELF class: ELFCLASS32"));
2338       else
2339         _dl_signal_error (errno, name, NULL,
2340                           N_("cannot open shared object file"));
2341     }
2342
2343   void *stack_end = __libc_stack_end;
2344   return _dl_map_object_from_fd (name, fd, &fb, realname, loader, type, mode,
2345                                  &stack_end, nsid);
2346 }
2347
2348
2349 void
2350 internal_function
2351 _dl_rtld_di_serinfo (struct link_map *loader, Dl_serinfo *si, bool counting)
2352 {
2353   if (counting)
2354     {
2355       si->dls_cnt = 0;
2356       si->dls_size = 0;
2357     }
2358
2359   unsigned int idx = 0;
2360   char *allocptr = (char *) &si->dls_serpath[si->dls_cnt];
2361   void add_path (const struct r_search_path_struct *sps, unsigned int flags)
2362 # define add_path(sps, flags) add_path(sps, 0) /* XXX */
2363     {
2364       if (sps->dirs != (void *) -1)
2365         {
2366           struct r_search_path_elem **dirs = sps->dirs;
2367           do
2368             {
2369               const struct r_search_path_elem *const r = *dirs++;
2370               if (counting)
2371                 {
2372                   si->dls_cnt++;
2373                   si->dls_size += MAX (2, r->dirnamelen);
2374                 }
2375               else
2376                 {
2377                   Dl_serpath *const sp = &si->dls_serpath[idx++];
2378                   sp->dls_name = allocptr;
2379                   if (r->dirnamelen < 2)
2380                     *allocptr++ = r->dirnamelen ? '/' : '.';
2381                   else
2382                     allocptr = __mempcpy (allocptr,
2383                                           r->dirname, r->dirnamelen - 1);
2384                   *allocptr++ = '\0';
2385                   sp->dls_flags = flags;
2386                 }
2387             }
2388           while (*dirs != NULL);
2389         }
2390     }
2391
2392   /* When the object has the RUNPATH information we don't use any RPATHs.  */
2393   if (loader->l_info[DT_RUNPATH] == NULL)
2394     {
2395       /* First try the DT_RPATH of the dependent object that caused NAME
2396          to be loaded.  Then that object's dependent, and on up.  */
2397
2398       struct link_map *l = loader;
2399       do
2400         {
2401           if (cache_rpath (l, &l->l_rpath_dirs, DT_RPATH, "RPATH"))
2402             add_path (&l->l_rpath_dirs, XXX_RPATH);
2403           l = l->l_loader;
2404         }
2405       while (l != NULL);
2406
2407       /* If dynamically linked, try the DT_RPATH of the executable itself.  */
2408       if (loader->l_ns == LM_ID_BASE)
2409         {
2410           l = GL(dl_ns)[LM_ID_BASE]._ns_loaded;
2411           if (l != NULL && l->l_type != lt_loaded && l != loader)
2412             if (cache_rpath (l, &l->l_rpath_dirs, DT_RPATH, "RPATH"))
2413               add_path (&l->l_rpath_dirs, XXX_RPATH);
2414         }
2415     }
2416
2417   /* Try the LD_LIBRARY_PATH environment variable.  */
2418   add_path (&env_path_list, XXX_ENV);
2419
2420   /* Look at the RUNPATH information for this binary.  */
2421   if (cache_rpath (loader, &loader->l_runpath_dirs, DT_RUNPATH, "RUNPATH"))
2422     add_path (&loader->l_runpath_dirs, XXX_RUNPATH);
2423
2424   /* XXX
2425      Here is where ld.so.cache gets checked, but we don't have
2426      a way to indicate that in the results for Dl_serinfo.  */
2427
2428   /* Finally, try the default path.  */
2429   if (!(loader->l_flags_1 & DF_1_NODEFLIB))
2430     add_path (&rtld_search_dirs, XXX_default);
2431
2432   if (counting)
2433     /* Count the struct size before the string area, which we didn't
2434        know before we completed dls_cnt.  */
2435     si->dls_size += (char *) &si->dls_serpath[si->dls_cnt] - (char *) si;
2436 }