Commit Graph

19 Commits

Author SHA1 Message Date
Joseph Myers
04277e02d7 Update copyright dates with scripts/update-copyrights.
* All files with FSF copyright notices: Update copyright dates
	using scripts/update-copyrights.
	* locale/programs/charmap-kw.h: Regenerated.
	* locale/programs/locfile-kw.h: Likewise.
2019-01-01 00:11:28 +00:00
H.J. Lu
25123a1c5c x86-64/CET: Extend ucontext_t to save shadow stack
This patch adds a field to ucontext_t to save shadow stack:

1. getcontext and swapcontext are updated to save the caller's shadow
stack pointer and return addresses.
2. setcontext and swapcontext are updated to restore shadow stack and
jump to new context directly.
3. makecontext is updated to allocate a new shadow stack and set the
caller's return address to __start_context.

Since makecontext allocates a new shadow stack when making a new
context and kernel allocates a new shadow stack for clone/fork/vfork
syscalls, we track the current shadow stack base.  In setcontext and
swapcontext, if the target shadow stack base is the same as the current
shadow stack base, we unwind the shadow stack.  Otherwise it is a stack
switch and we look for a restore token.

We enable shadow stack at run-time only if program and all used shared
objects, including dlopened ones, are shadow stack enabled, which means
that they must be compiled with GCC 8 or above and glibc 2.28 or above.
We need to save and restore shadow stack only if shadow stack is enabled.
When caller of getcontext, setcontext, swapcontext and makecontext is
compiled with smaller ucontext_t, shadow stack won't be enabled at
run-time.  We check if shadow stack is enabled before accessing the
extended field in ucontext_t.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>

	* sysdeps/unix/sysv/linux/x86/sys/ucontext.h (ucontext_t): Add
	__ssp.
	* sysdeps/unix/sysv/linux/x86_64/__start_context.S: Include
	<asm/prctl.h> and "ucontext_i.h" when shadow stack is enabled.
	(__push___start_context): New.
	* sysdeps/unix/sysv/linux/x86_64/getcontext.S: Include
	<asm/prctl.h>.
	(__getcontext): Record the current shadow stack base.  Save the
	caller's shadow stack pointer and base.
	* sysdeps/unix/sysv/linux/x86_64/makecontext.c: Include
	<pthread.h>, <libc-pointer-arith.h> and <sys/prctl.h>.
	(__push___start_context): New prototype.
	(__makecontext): Call __push___start_context to allocate a new
	shadow stack, push __start_context onto the new stack as well
	as the new shadow stack.
	* sysdeps/unix/sysv/linux/x86_64/setcontext.S: Include
	<asm/prctl.h>.
	(__setcontext): Restore the target shadow stack.
	* sysdeps/unix/sysv/linux/x86_64/swapcontext.S: Include
	<asm/prctl.h>.
	(__swapcontext): Record the current shadow stack base.  Save
	the caller's shadow stack pointer and base.  Restore the target
	shadow stack.
	* sysdeps/unix/sysv/linux/x86_64/sysdep.h
	(STACK_SIZE_TO_SHADOW_STACK_SIZE_SHIFT): New.
	* sysdeps/unix/sysv/linux/x86_64/ucontext_i.sym (oSSP): New.
2018-07-25 06:37:31 -07:00
Joseph Myers
688903eb3e Update copyright dates with scripts/update-copyrights.
* All files with FSF copyright notices: Update copyright dates
	using scripts/update-copyrights.
	* locale/programs/charmap-kw.h: Regenerated.
	* locale/programs/locfile-kw.h: Likewise.
2018-01-01 00:32:25 +00:00
H.J. Lu
41e673c1e7 x86-64: Mark internal symbols with attribute_hidden [BZ #18822]
Since __syscall_clock_gettime and __start_context are internal symbols
for Linux/x86-64, mark them with attribute_hidden.

	[BZ #18822]
	* sysdeps/unix/sysv/linux/x86_64/init-first.c
	(__syscall_clock_gettime): Add attribute_hidden.
	* sysdeps/unix/sysv/linux/x86_64/makecontext.c
	(__start_context): Likewise.
2017-08-21 05:58:53 -07:00
Joseph Myers
bfff8b1bec Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
Joseph Myers
f7a9f785e5 Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
Joseph Myers
b168057aaa Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
Allan McRae
d4697bc93d Update copyright notices with scripts/update-copyrights 2014-01-01 22:00:23 +10:00
Joseph Myers
568035b787 Update copyright notices with scripts/update-copyrights. 2013-01-02 19:05:09 +00:00
H.J. Lu
6b6cd74bab Use greg_t and uintptr_t in x86-64 __makecontext 2012-03-16 15:20:45 -07:00
Paul Eggert
59ba27a63a Replace FSF snail mail address with URLs. 2012-02-09 23:18:22 +00:00
Ulrich Drepper
6c30d38fdd [BZ #5436]
2008-04-09  Ulrich Drepper  <drepper@redhat.com>
	* stdlib/tst-makecontext.c: Change parameter to cf to negative
	value to check for correct sign extension.

	[BZ #5436]
	* sysdeps/unix/sysv/linux/x86_64/makecontext.c (__makecontext):
	Copy 64-bit parameter values even though this is not required in
	the standard.

	* sysdeps/unix/sysv/linux/x86_64/vfork.S (__vfork): Record return
	PC save.
2008-04-09 18:30:12 +00:00
Ulrich Drepper
1ab18a5bfb Add space inf weak_alias use. 2005-05-26 14:30:51 +00:00
Ulrich Drepper
3cc4a09733 * wcsmbs/wctob.c (wctob): Make buf array of unsigned char.
* sysdeps/generic/strchrnul.c: Add cast to avoid warning.
	* libio/iofwide.c: Add casts to avoid warnings.
	* stdio-common/printf-prs.c (parse_printf_format): Introduce new
	variable f to avoid warnings.
	* sysdeps/unix/sysv/linux/x86_64/makecontext.c (__makecontext):
	Fix a few casts to avoid warnings.
	* iconv/gconv_simple.c (internal_utf8_loop): Make start unsigned
	to avoid warning.
2005-03-06 04:51:37 +00:00
Ulrich Drepper
a334319f65 (CFLAGS-tst-align.c): Add -mpreferred-stack-boundary=4. 2004-12-22 20:10:10 +00:00
Jakub Jelinek
0ecb606cb6 2.5-18.1 2007-07-12 18:26:36 +00:00
Andreas Jaeger
c2df18a970 (__makecontext): Handle more than 6 args correctly. Based on a patch by Masahide Washizawa. 2004-06-05 07:54:40 +00:00
Andreas Jaeger
9f19140a47 (__makecontext): Correctly compute alignment. 2004-05-10 14:42:28 +00:00
Andreas Jaeger
ba1e2fe668 Linux/x86-64 makecontext implementation. 2002-08-31 08:04:45 +00:00