Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F146286636
D28221.id82458.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
6 KB
Referenced Files
None
Subscribers
None
D28221.id82458.diff
View Options
diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c
--- a/libexec/rtld-elf/rtld.c
+++ b/libexec/rtld-elf/rtld.c
@@ -204,14 +204,13 @@
static bool dangerous_ld_env; /* True if environment variables have been
used to affect the libraries loaded */
bool ld_bind_not; /* Disable PLT update */
-static char *ld_bind_now; /* Environment variable for immediate binding */
-static char *ld_debug; /* Environment variable for debugging */
+static bool ld_bind_now; /* Environment variable for immediate binding */
static char *ld_library_path; /* Environment variable for search path */
static char *ld_library_dirs; /* Environment variable for library descriptors */
static char *ld_preload; /* Environment variable for libraries to
load first */
static const char *ld_elf_hints_path; /* Environment variable for alternative hints path */
-static const char *ld_tracing; /* Called from ldd to print libs */
+static bool ld_tracing; /* Called from ldd to print libs */
static char *ld_utrace; /* Use utrace() to log events. */
static struct obj_entry_q obj_list; /* Queue of all loaded objects */
static Obj_Entry *obj_main; /* The main program shared object */
@@ -367,6 +366,20 @@
return (result);
}
+/* return true if the variable is non-empty and not equal to "0" */
+#define is_ld_env_set(var) _is_ld_env_set(_LD(var), LD_FALLBACK(var))
+
+static inline bool
+_is_ld_env_set(const char *prefixed, const char *fallback)
+{
+ char *env_var;
+
+ env_var = _get_ld_env(prefixed, fallback);
+
+ return (env_var != NULL && *env_var != '\0' &&
+ __builtin_strcmp(env_var, "0") != 0);
+}
+
/*
* Main entry point for dynamic linking. The first argument is the
* stack pointer. The stack is expected to be laid out as described
@@ -576,7 +589,7 @@
}
}
- ld_bind_now = get_ld_env("BIND_NOW");
+ ld_bind_now = is_ld_env_set("BIND_NOW");
/*
* If the process is tainted, then we un-set the dangerous environment
@@ -594,16 +607,16 @@
rtld_die();
}
}
- ld_debug = get_ld_env("DEBUG");
- if (ld_bind_now == NULL)
- ld_bind_not = get_ld_env("BIND_NOT") != NULL;
- libmap_disable = get_ld_env("LIBMAP_DISABLE") != NULL;
+ debug = is_ld_env_set("DEBUG");
+ if (!ld_bind_now)
+ ld_bind_not = is_ld_env_set("BIND_NOT");
+ libmap_disable = is_ld_env_set("LIBMAP_DISABLE");
libmap_override = get_ld_env("LIBMAP");
ld_library_path = get_ld_env("LIBRARY_PATH");
ld_library_dirs = get_ld_env("LIBRARY_PATH_FDS");
ld_preload = get_ld_env("PRELOAD");
ld_elf_hints_path = get_ld_env("ELF_HINTS_PATH");
- ld_loadfltr = get_ld_env("LOADFLTR") != NULL;
+ ld_loadfltr = is_ld_env_set("LOADFLTR");
library_path_rpath = get_ld_env("LIBRARY_PATH_RPATH");
if (library_path_rpath != NULL) {
if (library_path_rpath[0] == 'y' ||
@@ -616,14 +629,12 @@
dangerous_ld_env = libmap_disable || (libmap_override != NULL) ||
(ld_library_path != NULL) || (ld_preload != NULL) ||
(ld_elf_hints_path != NULL) || ld_loadfltr;
- ld_tracing = get_ld_env("TRACE_LOADED_OBJECTS");
+ ld_tracing = is_ld_env_set("TRACE_LOADED_OBJECTS");
ld_utrace = get_ld_env("UTRACE");
if ((ld_elf_hints_path == NULL) || strlen(ld_elf_hints_path) == 0)
ld_elf_hints_path = ld_elf_hints_default;
- if (ld_debug != NULL && *ld_debug != '\0')
- debug = 1;
dbg("%s is initialized, base address = %p", __progname,
(caddr_t) aux_info[AT_BASE]->a_un.a_ptr);
dbg("RTLD dynamic = %p", obj_rtld.dynamic);
@@ -722,8 +733,7 @@
preload_tail = globallist_curr(TAILQ_LAST(&obj_list, obj_entry_q));
dbg("loading needed objects");
- if (load_needed_objects(obj_main, ld_tracing != NULL ? RTLD_LO_TRACE :
- 0) == -1)
+ if (load_needed_objects(obj_main, ld_tracing ? RTLD_LO_TRACE : 0) == -1)
rtld_die();
/* Make a list of all objects loaded at startup. */
@@ -749,7 +759,7 @@
exit(0);
}
- if (get_ld_env("DUMP_REL_PRE") != NULL) {
+ if (is_ld_env_set("DUMP_REL_PRE")) {
dump_relocations(obj_main);
exit (0);
}
@@ -768,16 +778,15 @@
allocate_tls_offset(entry->obj);
}
- if (relocate_objects(obj_main,
- ld_bind_now != NULL && *ld_bind_now != '\0',
- &obj_rtld, SYMLOOK_EARLY, NULL) == -1)
+ if (relocate_objects(obj_main, ld_bind_now, &obj_rtld, SYMLOOK_EARLY,
+ NULL) == -1)
rtld_die();
dbg("doing copy relocations");
if (do_copy_relocations(obj_main) == -1)
rtld_die();
- if (get_ld_env("DUMP_REL_POST") != NULL) {
+ if (is_ld_env_set("DUMP_REL_POST")) {
dump_relocations(obj_main);
exit (0);
}
@@ -832,8 +841,8 @@
wlock_acquire(rtld_bind_lock, &lockstate);
dbg("resolving ifuncs");
- if (initlist_objects_ifunc(&initlist, ld_bind_now != NULL &&
- *ld_bind_now != '\0', SYMLOOK_EARLY, &lockstate) == -1)
+ if (initlist_objects_ifunc(&initlist, ld_bind_now, SYMLOOK_EARLY,
+ &lockstate) == -1)
rtld_die();
rtld_exit_ptr = rtld_exit;
@@ -3429,8 +3438,8 @@
int lo_flags;
LD_UTRACE(UTRACE_DLOPEN_START, NULL, NULL, 0, mode, name);
- ld_tracing = (mode & RTLD_TRACE) == 0 ? NULL : "1";
- if (ld_tracing != NULL) {
+ ld_tracing = (mode & RTLD_TRACE) != 0;
+ if (ld_tracing) {
rlock_acquire(rtld_bind_lock, &lockstate);
if (sigsetjmp(lockstate.env, 0) != 0)
lock_upgrade(rtld_bind_lock, &lockstate);
@@ -3444,7 +3453,7 @@
lo_flags |= RTLD_LO_NOLOAD;
if (mode & RTLD_DEEPBIND)
lo_flags |= RTLD_LO_DEEPBIND;
- if (ld_tracing != NULL)
+ if (ld_tracing)
lo_flags |= RTLD_LO_TRACE | RTLD_LO_IGNSTLS;
return (dlopen_object(name, fd, obj_main, lo_flags,
@@ -4676,7 +4685,8 @@
static void
trace_loaded_objects(Obj_Entry *obj)
{
- const char *fmt1, *fmt2, *fmt, *main_local, *list_containers;
+ const char *fmt1, *fmt2, *fmt, *main_local;
+ bool list_containers;
int c;
if ((main_local = get_ld_env("TRACE_LOADED_OBJECTS_PROGNAME")) == NULL)
@@ -4688,7 +4698,7 @@
if ((fmt2 = get_ld_env("TRACE_LOADED_OBJECTS_FMT2")) == NULL)
fmt2 = "\t%o (%x)\n";
- list_containers = get_ld_env("TRACE_LOADED_OBJECTS_ALL");
+ list_containers = is_ld_env_set("TRACE_LOADED_OBJECTS_ALL");
for (; obj != NULL; obj = TAILQ_NEXT(obj, next)) {
Needed_Entry *needed;
@@ -5475,11 +5485,11 @@
continue;
if (rtld_verify_object_versions(entry->obj) == -1) {
rc = -1;
- if (ld_tracing == NULL)
+ if (ld_tracing)
break;
}
}
- if (rc == 0 || ld_tracing != NULL)
+ if (rc == 0 || ld_tracing)
rc = rtld_verify_object_versions(&obj_rtld);
return rc;
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Mar 2, 10:24 AM (17 h, 35 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
29153520
Default Alt Text
D28221.id82458.diff (6 KB)
Attached To
Mode
D28221: rtld: change a few const char* variables to bool
Attached
Detach File
Event Timeline
Log In to Comment