mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-29 11:41:21 +03:00
Fix startup to security-relevant statically linked binaries.
Before the change they crash on startup. Perform IREL relocations earlier to prevent this.
This commit is contained in:
@ -72,15 +72,14 @@ extern void _fini (void);
|
||||
/* These functions are passed to __libc_start_main by the startup code.
|
||||
These get statically linked into each program. For dynamically linked
|
||||
programs, this module will come from libc_nonshared.a and differs from
|
||||
the libc.a module in that it doesn't call the preinit array. */
|
||||
the libc.a module in that it doesn't call the preinit array and performs
|
||||
explicit IREL{,A} relocations. */
|
||||
|
||||
void
|
||||
__libc_csu_init (int argc, char **argv, char **envp)
|
||||
{
|
||||
/* For dynamically linked executables the preinit array is executed by
|
||||
the dynamic linker (before initializing any shared object. */
|
||||
|
||||
#ifndef LIBC_NONSHARED
|
||||
void
|
||||
__libc_csu_irel (void)
|
||||
{
|
||||
# ifdef USE_MULTIARCH
|
||||
# ifdef ELF_MACHINE_IRELA
|
||||
{
|
||||
@ -98,7 +97,17 @@ __libc_csu_init (int argc, char **argv, char **envp)
|
||||
}
|
||||
# endif
|
||||
# endif
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
void
|
||||
__libc_csu_init (int argc, char **argv, char **envp)
|
||||
{
|
||||
/* For dynamically linked executables the preinit array is executed by
|
||||
the dynamic linker (before initializing any shared object. */
|
||||
|
||||
#ifndef LIBC_NONSHARED
|
||||
/* For static executables, preinit happens right before init. */
|
||||
{
|
||||
const size_t size = __preinit_array_end - __preinit_array_start;
|
||||
|
Reference in New Issue
Block a user