mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-14 01:00:07 +00:00
Update.
2004-01-13 Ulrich Drepper <drepper@redhat.com> * sysdeps/unix/sysv/linux/dl-execstack.c: Change interface. Add challenge for caller. * sysdeps/generic/ldsodefs.h: Change declaration and type of hook member in rtld_global appropriately. * elf/dl-support.c: Likewise. * elf/dl-load.c (_dl_map_object_from_fd): Take additional paramter. Pass it on to the changed function. (_dl_map_object): Pass new parameter to _dl_map_object_from_fd.
This commit is contained in:
parent
0a182a286d
commit
d1fc817ea4
11
ChangeLog
11
ChangeLog
@ -1,3 +1,14 @@
|
||||
2004-01-13 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* sysdeps/unix/sysv/linux/dl-execstack.c: Change interface. Add
|
||||
challenge for caller.
|
||||
* sysdeps/generic/ldsodefs.h: Change declaration and type of hook
|
||||
member in rtld_global appropriately.
|
||||
* elf/dl-support.c: Likewise.
|
||||
* elf/dl-load.c (_dl_map_object_from_fd): Take additional paramter.
|
||||
Pass it on to the changed function.
|
||||
(_dl_map_object): Pass new parameter to _dl_map_object_from_fd.
|
||||
|
||||
2004-01-13 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* sysdeps/alpha/bits/atomic.h (__arch_compare_and_exchange_xxx_8_int):
|
||||
|
@ -811,7 +811,7 @@ static
|
||||
struct link_map *
|
||||
_dl_map_object_from_fd (const char *name, int fd, struct filebuf *fbp,
|
||||
char *realname, struct link_map *loader, int l_type,
|
||||
int mode)
|
||||
int mode, void **stack_endp)
|
||||
{
|
||||
struct link_map *l = NULL;
|
||||
const ElfW(Ehdr) *header;
|
||||
@ -1351,7 +1351,7 @@ cannot allocate TLS data structures for initial thread");
|
||||
{
|
||||
/* The stack is presently not executable, but this module
|
||||
requires that it be executable. */
|
||||
errval = (*GL(dl_make_stack_executable_hook)) ();
|
||||
errval = (*GL(dl_make_stack_executable_hook)) (stack_endp);
|
||||
if (errval)
|
||||
{
|
||||
errstring = N_("\
|
||||
@ -1949,7 +1949,10 @@ cannot create shared object descriptor"));
|
||||
N_("cannot open shared object file"));
|
||||
}
|
||||
|
||||
return _dl_map_object_from_fd (name, fd, &fb, realname, loader, type, mode);
|
||||
extern void *__libc_stack_end;
|
||||
void *stack_end = __libc_stack_end;
|
||||
return _dl_map_object_from_fd (name, fd, &fb, realname, loader, type, mode,
|
||||
&stack_end);
|
||||
}
|
||||
INTDEF (_dl_map_object)
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Support for dynamic linking code in static libc.
|
||||
Copyright (C) 1996-2002, 2003 Free Software Foundation, Inc.
|
||||
Copyright (C) 1996-2002, 2003, 2004 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
|
||||
@ -136,7 +136,7 @@ ElfW(Word) _dl_stack_flags = PF_R|PF_W|PF_X;
|
||||
/* If loading a shared object requires that we make the stack executable
|
||||
when it was not, we do it by calling this function.
|
||||
It returns an errno code or zero on success. */
|
||||
int (*_dl_make_stack_executable_hook) (void) internal_function
|
||||
int (*_dl_make_stack_executable_hook) (void **) internal_function
|
||||
= _dl_make_stack_executable;
|
||||
|
||||
|
||||
|
@ -1,3 +1,9 @@
|
||||
2004-01-13 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* allocatestack.c (__make_stacks_executable): Change interface.
|
||||
Check parameters. Pass parameter on to libc counterpart.
|
||||
* pthreadP.h: Change declaration.
|
||||
|
||||
2004-01-13 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* sysdeps/alpha/Makefile: New file.
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||
|
||||
@ -661,10 +661,16 @@ __deallocate_stack (struct pthread *pd)
|
||||
}
|
||||
|
||||
|
||||
extern void *__libc_stack_end;
|
||||
|
||||
int
|
||||
internal_function
|
||||
__make_stacks_executable (void)
|
||||
__make_stacks_executable (void **stack_endp)
|
||||
{
|
||||
/* Challenge the caller. */
|
||||
if (*stack_endp != __libc_stack_end)
|
||||
return EPERM;
|
||||
|
||||
#ifdef NEED_SEPARATE_REGISTER_STACK
|
||||
const size_t pagemask = ~(__getpagesize () - 1);
|
||||
#endif
|
||||
@ -702,7 +708,7 @@ __make_stacks_executable (void)
|
||||
lll_unlock (stack_cache_lock);
|
||||
|
||||
if (err == 0)
|
||||
err = _dl_make_stack_executable ();
|
||||
err = _dl_make_stack_executable (stack_endp);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||
|
||||
@ -216,7 +216,8 @@ extern void __deallocate_stack (struct pthread *pd)
|
||||
extern void __reclaim_stacks (void) attribute_hidden;
|
||||
|
||||
/* Make all threads's stacks executable. */
|
||||
int __make_stacks_executable (void) internal_function attribute_hidden;
|
||||
extern int __make_stacks_executable (void **stack_endp)
|
||||
internal_function attribute_hidden;
|
||||
|
||||
/* longjmp handling. */
|
||||
extern void __pthread_cleanup_upto (__jmp_buf target, char *targetframe);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Run-time dynamic linker data structures for loaded ELF shared objects.
|
||||
Copyright (C) 1995-2002, 2003 Free Software Foundation, Inc.
|
||||
Copyright (C) 1995-2002, 2003, 2004 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
|
||||
@ -366,7 +366,7 @@ struct rtld_global
|
||||
/* If loading a shared object requires that we make the stack executable
|
||||
when it was not, we do it by calling this function.
|
||||
It returns an errno code or zero on success. */
|
||||
EXTERN int (*_dl_make_stack_executable_hook) (void) internal_function;
|
||||
EXTERN int (*_dl_make_stack_executable_hook) (void **) internal_function;
|
||||
|
||||
/* Keep the conditional TLS members at the end so the layout of the
|
||||
structure used by !USE_TLS code matches the prefix of the layout in
|
||||
@ -453,7 +453,7 @@ extern void **_dl_initial_error_catch_tsd (void) __attribute__ ((const))
|
||||
|
||||
/* This is the initial value of GL(dl_make_stack_executable_hook).
|
||||
A threads library can change it. */
|
||||
extern int _dl_make_stack_executable (void) internal_function;
|
||||
extern int _dl_make_stack_executable (void **stack_endp) internal_function;
|
||||
rtld_hidden_proto (_dl_make_stack_executable)
|
||||
|
||||
/* Parameters passed to the dynamic linker. */
|
||||
|
Loading…
Reference in New Issue
Block a user