mirror of
https://sourceware.org/git/glibc.git
synced 2025-08-05 19:35:52 +03:00
PLT avoidance for __stack_chk_fail [BZ #7065]
Add a hidden __stack_chk_fail_local alias to libc.so, and make sure that on targets which use __stack_chk_fail, this does not introduce a local PLT reference into libc.so.
This commit is contained in:
committed by
Florian Weimer
parent
66a704c43c
commit
524a8ef2ad
14
ChangeLog
14
ChangeLog
@@ -1,3 +1,17 @@
|
|||||||
|
2016-12-26 Nick Alcock <nick.alcock@oracle.com>
|
||||||
|
Adhemerval Zanella <adhemerval.zanella@linaro.org>
|
||||||
|
Florian Weimer <fweimer@redhat.com>
|
||||||
|
|
||||||
|
[BZ #7065]
|
||||||
|
PLT avoidance for __stack_chk_fail*.
|
||||||
|
* debug/Makefile (CFLAGS-stack_chk_fail.c)
|
||||||
|
(CFLAGS-stack_chk_fail_local.c): Build without stack protector.
|
||||||
|
* debug/stack_chk_fail.c (__stack_chk_fail): Add
|
||||||
|
__stack_chk_fail_local alias.
|
||||||
|
* sysdeps/generic/symbol-hacks.h [IS_IN (libc)]
|
||||||
|
(__stack_chk_fail): Turn into hidden reference to
|
||||||
|
__stack_chk_fail_local.
|
||||||
|
|
||||||
2016-12-26 Nick Alcock <nick.alcock@oracle.com>
|
2016-12-26 Nick Alcock <nick.alcock@oracle.com>
|
||||||
|
|
||||||
[BZ #7065]
|
[BZ #7065]
|
||||||
|
@@ -53,6 +53,12 @@ routines = backtrace backtracesyms backtracesymsfd noophooks \
|
|||||||
$(static-only-routines)
|
$(static-only-routines)
|
||||||
static-only-routines := warning-nop stack_chk_fail_local
|
static-only-routines := warning-nop stack_chk_fail_local
|
||||||
|
|
||||||
|
# Building the stack-protector failure routines with stack protection
|
||||||
|
# makes no sense.
|
||||||
|
|
||||||
|
CFLAGS-stack_chk_fail.c = $(no-stack-protector)
|
||||||
|
CFLAGS-stack_chk_fail_local.c = $(no-stack-protector)
|
||||||
|
|
||||||
CFLAGS-backtrace.c = -fno-omit-frame-pointer
|
CFLAGS-backtrace.c = -fno-omit-frame-pointer
|
||||||
CFLAGS-sprintf_chk.c = $(libio-mtsafe)
|
CFLAGS-sprintf_chk.c = $(libio-mtsafe)
|
||||||
CFLAGS-snprintf_chk.c = $(libio-mtsafe)
|
CFLAGS-snprintf_chk.c = $(libio-mtsafe)
|
||||||
|
@@ -27,3 +27,5 @@ __stack_chk_fail (void)
|
|||||||
{
|
{
|
||||||
__fortify_fail ("stack smashing detected");
|
__fortify_fail ("stack smashing detected");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
strong_alias (__stack_chk_fail, __stack_chk_fail_local)
|
||||||
|
@@ -4,4 +4,16 @@
|
|||||||
asm ("memmove = __GI_memmove");
|
asm ("memmove = __GI_memmove");
|
||||||
asm ("memset = __GI_memset");
|
asm ("memset = __GI_memset");
|
||||||
asm ("memcpy = __GI_memcpy");
|
asm ("memcpy = __GI_memcpy");
|
||||||
|
|
||||||
|
/* Some targets do not use __stack_chk_fail_local. In libc.so,
|
||||||
|
redirect __stack_chk_fail to a hidden reference
|
||||||
|
__stack_chk_fail_local, to avoid the PLT reference.
|
||||||
|
__stack_chk_fail itself is a global symbol, exported from libc.so,
|
||||||
|
and cannot be made hidden. */
|
||||||
|
|
||||||
|
# if IS_IN (libc) && defined SHARED && \
|
||||||
|
defined STACK_PROTECTOR_LEVEL && STACK_PROTECTOR_LEVEL > 0
|
||||||
|
asm (".hidden __stack_chk_fail_local\n"
|
||||||
|
"__stack_chk_fail = __stack_chk_fail_local");
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user