mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-28 00:21:52 +03:00
Do not stack-protect sigreturn stubs [BZ #7065]
These are called from the kernel with the stack at a carefully- chosen location so that the stack frame can be restored: they must not move the stack pointer lest garbage be restored into the registers. We explicitly inhibit protection for SPARC and for signal/sigreturn.c: other arches either define their sigreturn stubs in .S files, or (i386, x86_64, mips) use macros expanding to top-level asm blocks and explicit labels in the text section to mock up a "function" without telling the compiler that one is there at all.
This commit is contained in:
committed by
Florian Weimer
parent
1ad4ba28e9
commit
2e6c45c59b
@ -1,3 +1,12 @@
|
|||||||
|
2016-12-26 Nick Alcock <nick.alcock@oracle.com>
|
||||||
|
|
||||||
|
[BZ #7065]
|
||||||
|
* signal/Makefile (CFLAGS-sigreturn.c): Use $(no-stack-protector).
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/sparc64/sigaction.c:
|
||||||
|
(__rt_sigreturn_stub): Use inhibit_stack_protector.
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/sparc32/sigaction.c
|
||||||
|
(__rt_sigreturn_stub, __sigreturn_stub): Likewise.
|
||||||
|
|
||||||
2016-12-26 Nick Alcock <nick.alcock@oracle.com>
|
2016-12-26 Nick Alcock <nick.alcock@oracle.com>
|
||||||
|
|
||||||
[BZ #7065]
|
[BZ #7065]
|
||||||
|
@ -48,3 +48,5 @@ CFLAGS-sigsuspend.c = -fexceptions -fasynchronous-unwind-tables
|
|||||||
CFLAGS-sigtimedwait.c = -fexceptions -fasynchronous-unwind-tables
|
CFLAGS-sigtimedwait.c = -fexceptions -fasynchronous-unwind-tables
|
||||||
CFLAGS-sigwait.c = -fexceptions -fasynchronous-unwind-tables
|
CFLAGS-sigwait.c = -fexceptions -fasynchronous-unwind-tables
|
||||||
CFLAGS-sigwaitinfo.c = -fexceptions -fasynchronous-unwind-tables
|
CFLAGS-sigwaitinfo.c = -fexceptions -fasynchronous-unwind-tables
|
||||||
|
|
||||||
|
CFLAGS-sigreturn.c = $(no-stack-protector)
|
||||||
|
@ -65,7 +65,9 @@ libc_hidden_def (__libc_sigaction)
|
|||||||
#include <nptl/sigaction.c>
|
#include <nptl/sigaction.c>
|
||||||
|
|
||||||
|
|
||||||
static void
|
static
|
||||||
|
inhibit_stack_protector
|
||||||
|
void
|
||||||
__rt_sigreturn_stub (void)
|
__rt_sigreturn_stub (void)
|
||||||
{
|
{
|
||||||
__asm__ ("mov %0, %%g1\n\t"
|
__asm__ ("mov %0, %%g1\n\t"
|
||||||
@ -74,7 +76,9 @@ __rt_sigreturn_stub (void)
|
|||||||
: "i" (__NR_rt_sigreturn));
|
: "i" (__NR_rt_sigreturn));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static
|
||||||
|
inhibit_stack_protector
|
||||||
|
void
|
||||||
__sigreturn_stub (void)
|
__sigreturn_stub (void)
|
||||||
{
|
{
|
||||||
__asm__ ("mov %0, %%g1\n\t"
|
__asm__ ("mov %0, %%g1\n\t"
|
||||||
|
@ -66,7 +66,9 @@ libc_hidden_def (__libc_sigaction)
|
|||||||
#include <nptl/sigaction.c>
|
#include <nptl/sigaction.c>
|
||||||
|
|
||||||
|
|
||||||
static void
|
static
|
||||||
|
inhibit_stack_protector
|
||||||
|
void
|
||||||
__rt_sigreturn_stub (void)
|
__rt_sigreturn_stub (void)
|
||||||
{
|
{
|
||||||
__asm__ ("mov %0, %%g1\n\t"
|
__asm__ ("mov %0, %%g1\n\t"
|
||||||
|
Reference in New Issue
Block a user