diff options
author | Dmitry V. Levin <ldv@altlinux.org> | 2017-12-18 21:46:07 +0000 |
---|---|---|
committer | Dmitry V. Levin <ldv@altlinux.org> | 2017-12-19 21:53:11 +0000 |
commit | 10e93d968716ab82931d593bada121c17c0a4b93 (patch) | |
tree | 9294d2de807ee0e90c40389fcff7b916c270c372 /elf | |
parent | ce16eb52c0987fd94bc13d51ddc787134a7e4b0c (diff) | |
download | glibc-10e93d968716ab82931d593bada121c17c0a4b93.tar.gz |
elf: remove redundant __libc_enable_secure check from fillin_rpath
There are just two users of fillin_rpath: one is decompose_rpath that
sets check_trusted argument to 0, another one is _dl_init_paths that
sets check_trusted argument to __libc_enable_secure and invokes
fillin_rpath only when LD_LIBRARY_PATH is non-empty.
Starting with commit
glibc-2.25.90-512-gf6110a8fee2ca36f8e2d2abecf3cba9fa7b8ea7d,
LD_LIBRARY_PATH is ignored for __libc_enable_secure executables,
so check_trusted argument of fillin_rpath is always zero.
* elf/dl-load.c (is_trusted_path): Remove.
(fillin_rpath): Remove check_trusted argument and its use,
all callers changed.
Diffstat (limited to 'elf')
-rw-r--r-- | elf/dl-load.c | 33 |
1 files changed, 3 insertions, 30 deletions
diff --git a/elf/dl-load.c b/elf/dl-load.c index e7d97dcc56..2964464158 100644 --- a/elf/dl-load.c +++ b/elf/dl-load.c @@ -117,24 +117,6 @@ static const size_t system_dirs_len[] = #define nsystem_dirs_len array_length (system_dirs_len) static bool -is_trusted_path (const char *path, size_t len) -{ - const char *trun = system_dirs; - - for (size_t idx = 0; idx < nsystem_dirs_len; ++idx) - { - if (len == system_dirs_len[idx] && memcmp (trun, path, len) == 0) - /* Found it. */ - return true; - - trun += system_dirs_len[idx] + 1; - } - - return false; -} - - -static bool is_trusted_path_normalize (const char *path, size_t len) { if (len == 0) @@ -428,8 +410,7 @@ static size_t max_dirnamelen; static struct r_search_path_elem ** fillin_rpath (char *rpath, struct r_search_path_elem **result, const char *sep, - int check_trusted, const char *what, const char *where, - struct link_map *l) + const char *what, const char *where, struct link_map *l) { char *cp; size_t nelems = 0; @@ -459,13 +440,6 @@ fillin_rpath (char *rpath, struct r_search_path_elem **result, const char *sep, if (len > 0 && cp[len - 1] != '/') cp[len++] = '/'; - /* Make sure we don't use untrusted directories if we run SUID. */ - if (__glibc_unlikely (check_trusted) && !is_trusted_path (cp, len)) - { - free (to_free); - continue; - } - /* See if this directory is already known. */ for (dirp = GL(dl_all_dirs); dirp != NULL; dirp = dirp->next) if (dirp->dirnamelen == len && memcmp (cp, dirp->dirname, len) == 0) @@ -614,7 +588,7 @@ decompose_rpath (struct r_search_path_struct *sps, _dl_signal_error (ENOMEM, NULL, NULL, errstring); } - fillin_rpath (copy, result, ":", 0, what, where, l); + fillin_rpath (copy, result, ":", what, where, l); /* Free the copied RPATH string. `fillin_rpath' make own copies if necessary. */ @@ -791,8 +765,7 @@ _dl_init_paths (const char *llp) } (void) fillin_rpath (llp_tmp, env_path_list.dirs, ":;", - __libc_enable_secure, "LD_LIBRARY_PATH", - NULL, l); + "LD_LIBRARY_PATH", NULL, l); if (env_path_list.dirs[0] == NULL) { |