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