mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-27 03:41:23 +08:00
* elf/rtld.c (process_envvars): Place output files for profiling
in SUID binaries in /var/profile. * elf/dl-load.c (_dl_map_object): Don't look in cache for preloading in SUID binaries. * elf/dl-profile.c (_dl_start_profile): Open the output file with O_NOFOLLOW if possible. * sysdeps/generic/segfault.c (install_handler): Check output file name with access().
This commit is contained in:
parent
36b04d7a19
commit
18c5126084
@ -1,5 +1,5 @@
|
||||
/* Map in a shared object's segments from the file.
|
||||
Copyright (C) 1995, 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
|
||||
Copyright (C) 1995, 1996, 1997, 1998, 1999, 2001 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
@ -1338,7 +1338,7 @@ _dl_map_object (struct link_map *loader, const char *name, int preloaded,
|
||||
if (fd == -1 && env_path_list != NULL)
|
||||
fd = open_path (name, namelen, preloaded, env_path_list, &realname);
|
||||
|
||||
if (fd == -1)
|
||||
if (fd == -1 && (! preloaded || ! __libc_enable_secure))
|
||||
{
|
||||
/* Check the list of libraries in the file /etc/ld.so.cache,
|
||||
for compatibility with Linux's ldconfig program. */
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Profiling of shared libraries.
|
||||
Copyright (C) 1997, 1998 Free Software Foundation, Inc.
|
||||
Copyright (C) 1997, 1998, 2001 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||
Based on the BSD mcount implementation.
|
||||
@ -263,7 +263,12 @@ _dl_start_profile (struct link_map *map, const char *output_dir)
|
||||
*cp++ = '/';
|
||||
__stpcpy (__stpcpy (cp, _dl_profile), ".profile");
|
||||
|
||||
fd = __open (filename, O_RDWR | O_CREAT, 0666);
|
||||
#ifdef O_NOFOLLOW
|
||||
# define EXTRA_FLAGS | O_NOFOLLOW
|
||||
#else
|
||||
# define EXTRA_FLAGS
|
||||
#endif
|
||||
fd = __open (filename, O_RDWR | O_CREAT EXTRA_FLAGS, 0666);
|
||||
if (fd == -1)
|
||||
{
|
||||
/* We cannot write the profiling data so don't do anything. */
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Run time dynamic linker.
|
||||
Copyright (C) 1995-1999, 2000 Free Software Foundation, Inc.
|
||||
Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
@ -1273,7 +1273,7 @@ process_envvars (enum mode *modep, int *lazyp)
|
||||
char *debug_output = NULL;
|
||||
|
||||
/* This is the default place for profiling data file. */
|
||||
_dl_profile_output = "/var/tmp";
|
||||
_dl_profile_output = __libc_enable_secure ? "/var/profile" : "/var/tmp";
|
||||
|
||||
while ((envline = _dl_next_ld_env_entry (&runp)) != NULL)
|
||||
{
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Catch segmentation faults and print backtrace.
|
||||
Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
|
||||
Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
|
||||
|
||||
@ -236,6 +236,6 @@ install_handler (void)
|
||||
|
||||
/* Preserve the output file name if there is any given. */
|
||||
name = getenv ("SEGFAULT_OUTPUT_NAME");
|
||||
if (name != NULL && name[0] != '\0')
|
||||
if (name != NULL && name[0] != '\0' && access (name, R_OK | W_OK) == 0)
|
||||
fname = __strdup (name);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user