diff options
author | Andreas Schwab <schwab@redhat.com> | 2010-10-24 21:43:15 -0400 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2010-10-24 21:43:15 -0400 |
commit | 8e9f92e9d5d7737afdacf79b76d98c4c42980508 (patch) | |
tree | e32d3fc076f96d6b6ee06e2a43bc0ff9e408a2a5 /elf/dl-load.c | |
parent | bc96fbda275c305ddc1b0b6d94fc68d81369221a (diff) | |
download | glibc-8e9f92e9d5d7737afdacf79b76d98c4c42980508.zip glibc-8e9f92e9d5d7737afdacf79b76d98c4c42980508.tar.gz glibc-8e9f92e9d5d7737afdacf79b76d98c4c42980508.tar.bz2 |
Require suid bit on audit objects in privileged programs
Diffstat (limited to 'elf/dl-load.c')
-rw-r--r-- | elf/dl-load.c | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/elf/dl-load.c b/elf/dl-load.c index a7162eb..aa8738f 100644 --- a/elf/dl-load.c +++ b/elf/dl-load.c @@ -1812,7 +1812,7 @@ open_verify (const char *name, struct filebuf *fbp, struct link_map *loader, if MAY_FREE_DIRS is true. */ static int -open_path (const char *name, size_t namelen, int preloaded, +open_path (const char *name, size_t namelen, int secure, struct r_search_path_struct *sps, char **realname, struct filebuf *fbp, struct link_map *loader, int whatcode, bool *found_other_class) @@ -1894,7 +1894,7 @@ open_path (const char *name, size_t namelen, int preloaded, /* Remember whether we found any existing directory. */ here_any |= this_dir->status[cnt] != nonexisting; - if (fd != -1 && __builtin_expect (preloaded, 0) + if (fd != -1 && __builtin_expect (secure, 0) && INTUSE(__libc_enable_secure)) { /* This is an extra security effort to make sure nobody can @@ -1963,7 +1963,7 @@ open_path (const char *name, size_t namelen, int preloaded, struct link_map * internal_function -_dl_map_object (struct link_map *loader, const char *name, int preloaded, +_dl_map_object (struct link_map *loader, const char *name, int type, int trace_mode, int mode, Lmid_t nsid) { int fd; @@ -2067,7 +2067,8 @@ _dl_map_object (struct link_map *loader, const char *name, int preloaded, for (l = loader; l; l = l->l_loader) if (cache_rpath (l, &l->l_rpath_dirs, DT_RPATH, "RPATH")) { - fd = open_path (name, namelen, preloaded, &l->l_rpath_dirs, + fd = open_path (name, namelen, mode & __RTLD_SECURE, + &l->l_rpath_dirs, &realname, &fb, loader, LA_SER_RUNPATH, &found_other_class); if (fd != -1) @@ -2082,14 +2083,15 @@ _dl_map_object (struct link_map *loader, const char *name, int preloaded, && main_map != NULL && main_map->l_type != lt_loaded && cache_rpath (main_map, &main_map->l_rpath_dirs, DT_RPATH, "RPATH")) - fd = open_path (name, namelen, preloaded, &main_map->l_rpath_dirs, + fd = open_path (name, namelen, mode & __RTLD_SECURE, + &main_map->l_rpath_dirs, &realname, &fb, loader ?: main_map, LA_SER_RUNPATH, &found_other_class); } /* Try the LD_LIBRARY_PATH environment variable. */ if (fd == -1 && env_path_list.dirs != (void *) -1) - fd = open_path (name, namelen, preloaded, &env_path_list, + fd = open_path (name, namelen, mode & __RTLD_SECURE, &env_path_list, &realname, &fb, loader ?: GL(dl_ns)[LM_ID_BASE]._ns_loaded, LA_SER_LIBPATH, &found_other_class); @@ -2098,12 +2100,12 @@ _dl_map_object (struct link_map *loader, const char *name, int preloaded, if (fd == -1 && loader != NULL && cache_rpath (loader, &loader->l_runpath_dirs, DT_RUNPATH, "RUNPATH")) - fd = open_path (name, namelen, preloaded, + fd = open_path (name, namelen, mode & __RTLD_SECURE, &loader->l_runpath_dirs, &realname, &fb, loader, LA_SER_RUNPATH, &found_other_class); if (fd == -1 - && (__builtin_expect (! preloaded, 1) + && (__builtin_expect (! (mode & __RTLD_SECURE), 1) || ! INTUSE(__libc_enable_secure))) { /* Check the list of libraries in the file /etc/ld.so.cache, @@ -2169,7 +2171,7 @@ _dl_map_object (struct link_map *loader, const char *name, int preloaded, && ((l = loader ?: GL(dl_ns)[nsid]._ns_loaded) == NULL || __builtin_expect (!(l->l_flags_1 & DF_1_NODEFLIB), 1)) && rtld_search_dirs.dirs != (void *) -1) - fd = open_path (name, namelen, preloaded, &rtld_search_dirs, + fd = open_path (name, namelen, mode & __RTLD_SECURE, &rtld_search_dirs, &realname, &fb, l, LA_SER_DEFAULT, &found_other_class); /* Add another newline when we are tracing the library loading. */ |