mirror of
https://git.hardenedbsd.org/hardenedbsd/HardenedBSD.git
synced 2024-11-14 22:32:30 +01:00
rtld: constify most variables holding references to the environment values
Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D31545
This commit is contained in:
parent
b4b2748891
commit
aa68b3bb2e
@ -64,22 +64,22 @@ static const char *quickbasename(const char *);
|
||||
#define rtld_isspace(c) ((c) == ' ' || (c) == '\t')
|
||||
|
||||
int
|
||||
lm_init(char *libmap_override)
|
||||
lm_init(const char *libmap_override)
|
||||
{
|
||||
char *p;
|
||||
char *l, *p;
|
||||
|
||||
dbg("lm_init(\"%s\")", libmap_override);
|
||||
TAILQ_INIT(&lmp_head);
|
||||
|
||||
lmc_parse_file(ld_path_libmap_conf);
|
||||
|
||||
if (libmap_override) {
|
||||
if (libmap_override != NULL) {
|
||||
/*
|
||||
* Do some character replacement to make $LDLIBMAP look
|
||||
* like a text file, then parse it.
|
||||
*/
|
||||
libmap_override = xstrdup(libmap_override);
|
||||
for (p = libmap_override; *p; p++) {
|
||||
l = xstrdup(libmap_override);
|
||||
for (p = l; *p != 0; p++) {
|
||||
switch (*p) {
|
||||
case '=':
|
||||
*p = ' ';
|
||||
@ -89,8 +89,8 @@ lm_init(char *libmap_override)
|
||||
break;
|
||||
}
|
||||
}
|
||||
lmc_parse(libmap_override, p - libmap_override);
|
||||
free(libmap_override);
|
||||
lmc_parse(l, p - l);
|
||||
free(l);
|
||||
}
|
||||
|
||||
return (lm_count == 0);
|
||||
|
@ -2,7 +2,7 @@
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
int lm_init (char *);
|
||||
int lm_init(const char *);
|
||||
void lm_fini (void);
|
||||
char * lm_find (const char *, const char *);
|
||||
char * lm_findn (const char *, const char *, const size_t);
|
||||
|
@ -123,7 +123,7 @@ static void linkmap_delete(Obj_Entry *);
|
||||
static void load_filtees(Obj_Entry *, int flags, RtldLockState *);
|
||||
static void unload_filtees(Obj_Entry *, RtldLockState *);
|
||||
static int load_needed_objects(Obj_Entry *, int);
|
||||
static int load_preload_objects(char *, bool);
|
||||
static int load_preload_objects(const char *, bool);
|
||||
static Obj_Entry *load_object(const char *, int fd, const Obj_Entry *, int);
|
||||
static void map_stacks_exec(RtldLockState *);
|
||||
static int obj_disable_relro(Obj_Entry *);
|
||||
@ -202,24 +202,24 @@ int __sys_openat(int, const char *, int, ...);
|
||||
struct r_debug r_debug __exported; /* for GDB; */
|
||||
static bool libmap_disable; /* Disable libmap */
|
||||
static bool ld_loadfltr; /* Immediate filters processing */
|
||||
static char *libmap_override; /* Maps to use in addition to libmap.conf */
|
||||
static const char *libmap_override;/* Maps to use in addition to libmap.conf */
|
||||
static bool trust; /* False for setuid and setgid programs */
|
||||
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 const char *ld_bind_now; /* Environment variable for immediate binding */
|
||||
static const char *ld_debug; /* Environment variable for debugging */
|
||||
static bool ld_dynamic_weak = true; /* True if non-weak definition overrides
|
||||
weak definition */
|
||||
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
|
||||
static const char *ld_library_path;/* Environment variable for search path */
|
||||
static const char *ld_library_dirs;/* Environment variable for library descriptors */
|
||||
static const char *ld_preload; /* Environment variable for libraries to
|
||||
load first */
|
||||
static char *ld_preload_fds; /* Environment variable for libraries represented by
|
||||
static const char *ld_preload_fds;/* Environment variable for libraries represented by
|
||||
descriptors */
|
||||
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 char *ld_utrace; /* Use utrace() to log events. */
|
||||
static const 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 */
|
||||
static Obj_Entry obj_rtld; /* The dynamic linker shared object */
|
||||
@ -367,8 +367,8 @@ enum {
|
||||
};
|
||||
|
||||
struct ld_env_var_desc {
|
||||
const char *n;
|
||||
char *val;
|
||||
const char * const n;
|
||||
const char *val;
|
||||
const bool unsecure;
|
||||
};
|
||||
#define LD_ENV_DESC(var, unsec) \
|
||||
@ -398,13 +398,13 @@ static struct ld_env_var_desc ld_env_vars[] = {
|
||||
LD_ENV_DESC(TRACE_LOADED_OBJECTS_ALL, false),
|
||||
};
|
||||
|
||||
static char *
|
||||
static const char *
|
||||
ld_get_env_var(int idx)
|
||||
{
|
||||
return (ld_env_vars[idx].val);
|
||||
}
|
||||
|
||||
static char *
|
||||
static const char *
|
||||
rtld_get_env_val(char **env, const char *name, size_t name_len)
|
||||
{
|
||||
char **m, *n, *v;
|
||||
@ -493,8 +493,8 @@ _rtld(Elf_Addr *sp, func_ptr_type *exit_proc, Obj_Entry **objp)
|
||||
RtldLockState lockstate;
|
||||
struct stat st;
|
||||
Elf_Addr *argcp;
|
||||
char **argv, **env, **envp, *kexecpath, *library_path_rpath;
|
||||
const char *argv0, *binpath;
|
||||
char **argv, **env, **envp, *kexecpath;
|
||||
const char *argv0, *binpath, *library_path_rpath;
|
||||
struct ld_env_var_desc *lvd;
|
||||
caddr_t imgentry;
|
||||
char buf[MAXPATHLEN];
|
||||
@ -2600,36 +2600,42 @@ load_needed_objects(Obj_Entry *first, int flags)
|
||||
}
|
||||
|
||||
static int
|
||||
load_preload_objects(char *p, bool isfd)
|
||||
load_preload_objects(const char *penv, bool isfd)
|
||||
{
|
||||
Obj_Entry *obj;
|
||||
const char *name;
|
||||
size_t len;
|
||||
char savech, *p, *psave;
|
||||
int fd;
|
||||
static const char delim[] = " \t:;";
|
||||
|
||||
if (p == NULL)
|
||||
if (penv == NULL)
|
||||
return (0);
|
||||
|
||||
p = psave = xstrdup(penv);
|
||||
p += strspn(p, delim);
|
||||
while (*p != '\0') {
|
||||
const char *name;
|
||||
size_t len = strcspn(p, delim);
|
||||
char savech;
|
||||
int fd;
|
||||
len = strcspn(p, delim);
|
||||
|
||||
savech = p[len];
|
||||
p[len] = '\0';
|
||||
if (isfd) {
|
||||
name = NULL;
|
||||
fd = parse_integer(p);
|
||||
if (fd == -1)
|
||||
if (fd == -1) {
|
||||
free(psave);
|
||||
return (-1);
|
||||
}
|
||||
} else {
|
||||
name = p;
|
||||
fd = -1;
|
||||
}
|
||||
|
||||
obj = load_object(name, fd, NULL, 0);
|
||||
if (obj == NULL)
|
||||
if (obj == NULL) {
|
||||
free(psave);
|
||||
return (-1); /* XXX - cleanup */
|
||||
}
|
||||
obj->z_interpose = true;
|
||||
p[len] = savech;
|
||||
p += len;
|
||||
@ -2637,6 +2643,7 @@ load_preload_objects(char *p, bool isfd)
|
||||
}
|
||||
LD_UTRACE(UTRACE_PRELOAD_FINISHED, NULL, NULL, 0, 0, NULL);
|
||||
|
||||
free(psave);
|
||||
return (0);
|
||||
}
|
||||
|
||||
@ -6030,7 +6037,8 @@ rtld_strerror(int errnum)
|
||||
char *
|
||||
getenv(const char *name)
|
||||
{
|
||||
return (rtld_get_env_val(environ, name, strlen(name)));
|
||||
return (__DECONST(char *, rtld_get_env_val(environ, name,
|
||||
strlen(name))));
|
||||
}
|
||||
|
||||
/* malloc */
|
||||
|
Loading…
Reference in New Issue
Block a user