Bug 1579

Summary: Malloc is always called by stack back strace function
Product: glibc Reporter: H.J. Lu <hjl.tools>
Component: libcAssignee: Ulrich Drepper <drepper.fsp>
Status: RESOLVED FIXED    
Severity: normal CC: glibc-bugs
Priority: P2 Flags: fweimer: security-
Version: unspecified   
Target Milestone: ---   
Host: Target:
Build: Last reconfirmed:

Description H.J. Lu 2005-10-27 21:59:43 UTC
In /usr/include/execinfo.h, there are

/* This function is similar to backtrace_symbols() but it writes the result
   immediately to a file and can therefore also be used in situations where
   malloc() is not usable anymore.  */
extern void backtrace_symbols_fd (void *__const *__array, int __size, int __fd)
     __THROW __nonnull ((1));

The problem is stack bcktrace functions in glibc do dlopen (libgcc_s.so.1),
which will call malloc. That is malloc will be always called no matter which
function you use. Even if you build the executable with -shared-libgcc,
dl_open_worker will call dl_map_object_deps which will call malloc.

What dl_open_worker should do when a DSO to be dlopened is already on the
DT_NEEDED list in the executable?
Comment 1 Ulrich Drepper 2005-10-31 15:28:29 UTC
I changed the comment.