H.J. Lu
f33632ccd1
x86: Make a space in jmpbuf for shadow stack pointer
...
To support Shadow Stack (SHSTK) in Intel Control-flow Enforcement
Technology (CET) in setjmp/longjmp, we need to save shadow stack
pointer in jmp_buf. The __saved_mask field in jmp_buf has type
of __sigset_t. On Linux, __sigset_t is defined as
#define _SIGSET_NWORDS (1024 / (8 * sizeof (unsigned long int)))
typedef struct
{
unsigned long int __val[_SIGSET_NWORDS];
} __sigset_t;
which is much bigger than expected by the __sigprocmask system call,
which has
typedef struct {
unsigned long sig[_NSIG_WORDS];
} sigset_t;
For Linux/x86, we can shrink __sigset_t used by __saved_mask in jmp_buf
to add paddings for shadow stack pointer. As long as the new __sigset_t
is not smaller than sigset_t expected by the __sigprocmask system call,
it should work correctly.
This patch adds an internal header file, <setjmpP.h>, to define
__jmp_buf_sigset_t for __saved_mask in jmp_buf for Linux/x86 with a
space to store shadow stack pointer. It verifies __jmp_buf_sigset_t has
the suitable size for the __sigprocmask system call. A run-time test,
tst-saved_mask-1.c, is added to verify that size of __jmp_buf_sigset_t
is sufficient. If its size is too small, the test fails with
rt_sigprocmask(SIG_SETMASK, strace: umoven: short read (4 < 8) @0x7fa8aa28effc
0x7fa8aa28effc, NULL, 8) = -1 EFAULT (Bad address)
rt_sigprocmask(SIG_SETMASK, strace: umoven: short read (4 < 8) @0x7fa8aa28effc
0x7fa8aa28effc, NULL, 8) = -1 EFAULT (Bad address)
rt_sigprocmask(SIG_SETMASK, NULL, 0x7fa8aa28effc, 8) = -1 EFAULT (Bad address)
exit_group(1) = ?
Tested with build-many-glibcs.py.
* debug/longjmp_chk.c: Include <setjmpP.h> instead of
<setjmp.h>.
* setjmp/longjmp.c: Include <setjmpP.h> instead of <setjmp.h>.
(__libc_siglongjmp): Cast &env[0].__saved_mask to "sigset_t *".
* setjmp/sigjmp.c: Include <setjmpP.h> instead of <setjmp.h>.
(__sigjmp_save): Cast &env[0].__saved_mask to "sigset_t *".
* sysdeps/generic/setjmpP.h: New file.
* sysdeps/unix/sysv/linux/x86/jmp_buf-ssp.sym: Likewise.
* sysdeps/unix/sysv/linux/x86/setjmpP.h: Likewise.
* sysdeps/unix/sysv/linux/x86/tst-saved_mask-1.c: Likewise.
* sysdeps/unix/sysv/linux/x86/Makefile (gen-as-const-headers):
Add jmp_buf-ssp.sym.
(tests): Add tst-saved_mask-1.
2017-11-30 04:58:01 -08:00
..
2017-11-27 17:14:29 +01:00
2017-11-27 17:14:29 +01:00
2017-11-27 17:14:29 +01:00
2017-11-27 17:14:29 +01:00
2017-09-04 13:38:51 -07:00
2017-11-27 17:14:29 +01:00
2017-11-27 17:14:29 +01:00
2017-11-27 17:14:29 +01:00
2017-10-01 16:05:28 -07:00
2017-11-27 17:14:29 +01:00
2017-11-27 17:14:29 +01:00
2017-11-27 17:14:29 +01:00
2017-11-16 17:52:43 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-11-27 17:14:29 +01:00
2017-11-27 17:14:29 +01:00
2017-11-28 17:18:20 +00:00
2017-01-01 00:14:16 +00:00
2017-11-27 17:14:29 +01:00
2017-11-27 17:14:29 +01:00
2017-08-09 22:58:45 +00:00
2017-11-27 17:14:29 +01:00
2017-10-01 15:51:11 -07:00
2017-11-30 04:58:01 -08:00
2017-11-27 17:14:29 +01:00
2017-01-01 00:14:16 +00:00
2017-06-08 13:58:17 -04:00
2017-05-09 21:59:36 +00:00
2017-03-09 15:22:06 +01:00
2017-07-24 11:21:07 -03:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-08-31 15:59:06 +02:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-08-18 18:38:55 -03:00
2017-08-18 18:38:55 -03:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-08-18 18:38:55 -03:00
2017-01-01 00:14:16 +00:00
2016-02-24 18:44:10 +00:00
2016-02-24 18:44:10 +00:00
2017-03-09 15:22:06 +01:00
2017-05-11 17:27:27 -03:00
2017-05-11 17:27:27 -03:00
2017-01-28 19:21:44 -05:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-08-13 21:11:38 +02:00
2017-06-08 12:52:42 -07:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-08-31 16:59:37 +02:00
2017-08-31 16:59:37 +02:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-11-15 14:40:17 -02:00
2017-08-07 19:55:34 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-08-31 16:10:34 -03:00
2017-01-01 00:14:16 +00:00
2017-05-18 18:06:47 -03:00
2017-09-19 15:50:38 +00:00
2017-08-28 11:58:52 +02:00
2017-08-18 18:38:55 -03:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-10-01 15:08:32 -07:00
2017-10-01 15:08:32 -07:00
2017-05-18 18:06:47 -03:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-08-31 16:07:52 +02:00
2017-08-28 11:58:52 +02:00
2017-09-01 17:14:43 +00:00
2017-01-01 00:14:16 +00:00
2017-08-31 15:59:07 +02:00
2017-08-31 16:02:40 +02:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-08-18 18:38:55 -03:00
2017-01-01 00:14:16 +00:00
2017-08-18 18:38:55 -03:00
2017-08-18 18:38:55 -03:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-10-01 16:08:42 -07:00
2017-01-01 00:14:16 +00:00
2017-10-01 18:00:07 -07:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-10-01 16:12:24 -07:00
2017-10-01 16:12:24 -07:00
2017-10-01 15:57:21 -07:00
2017-01-01 00:14:16 +00:00
2017-09-25 18:04:16 -07:00
2017-10-01 18:02:10 -07:00
2017-09-25 18:04:16 -07:00
2017-09-25 18:04:16 -07:00
2017-09-08 16:34:02 +02:00
2017-09-08 16:34:02 +02:00
2017-08-18 18:38:55 -03:00
2017-11-15 08:58:48 -08:00
2017-09-27 17:18:32 -07:00
2017-01-01 00:14:16 +00:00
2017-10-01 15:08:32 -07:00
2017-10-01 15:08:32 -07:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2016-11-22 09:59:12 -08:00
2017-01-01 00:14:16 +00:00
2017-11-27 17:14:29 +01:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:26:24 +00:00
2017-01-01 00:14:16 +00:00
2017-08-18 18:38:55 -03:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-11-27 17:14:29 +01:00
2017-08-18 18:38:55 -03:00
2017-11-27 17:14:29 +01:00
2017-06-23 17:38:17 -03:00
2017-08-14 10:35:14 -03:00
2017-08-14 10:35:14 -03:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-08-18 18:38:55 -03:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-05-18 18:06:47 -03:00
2017-05-18 18:06:47 -03:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-05-18 18:06:47 -03:00
2017-08-22 14:25:08 -03:00
2017-08-13 21:11:28 +02:00
2017-10-01 15:56:27 -07:00
2017-08-31 16:10:34 -03:00
2017-07-24 11:21:07 -03:00
2017-05-20 19:04:43 -04:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-10-01 15:07:23 -07:00
2017-09-25 18:04:16 -07:00
2017-08-17 16:50:35 -03:00
2017-05-18 18:06:47 -03:00
2017-08-17 16:50:35 -03:00
2017-08-18 16:30:05 -03:00
2017-08-18 16:30:05 -03:00
2017-01-01 00:14:16 +00:00
2017-08-17 10:18:15 +02:00
2017-01-01 00:14:16 +00:00
2017-10-01 15:18:25 -07:00
2017-08-22 14:25:03 -03:00
2017-01-01 00:14:16 +00:00
2017-05-03 10:36:01 -03:00
2017-10-01 18:06:04 -07:00
2017-02-06 10:21:55 -02:00
2017-10-01 18:06:04 -07:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-05-02 14:57:40 -03:00
2017-05-02 14:57:40 -03:00
2017-08-08 09:59:46 -03:00
2017-08-31 18:52:00 +02:00
2017-08-08 09:59:46 -03:00
2017-08-31 18:52:00 +02:00
2017-05-09 14:05:09 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-08-18 18:38:55 -03:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-08-18 18:38:55 -03:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-06-07 17:37:59 +02:00
2017-05-31 17:35:46 -03:00
2017-05-02 14:57:40 -03:00
2017-08-08 09:59:46 -03:00
2017-08-31 18:52:00 +02:00
2017-08-08 09:59:46 -03:00
2017-08-31 18:52:00 +02:00
2017-01-01 00:14:16 +00:00
2017-08-18 10:31:16 -03:00
2017-01-01 00:14:16 +00:00
2017-10-01 15:51:11 -07:00
2017-01-01 00:14:16 +00:00
2017-10-01 15:54:10 -07:00
2017-01-01 00:14:16 +00:00
2017-03-09 15:22:06 +01:00
2017-03-09 15:22:06 +01:00
2017-05-09 21:59:36 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-10-01 18:03:59 -07:00
2017-05-03 10:36:36 -03:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-03-09 15:22:06 +01:00
2017-05-09 21:59:36 +00:00
2017-01-01 00:14:16 +00:00
2017-03-09 15:22:06 +01:00
2017-03-28 12:29:27 -03:00
2017-03-28 12:29:27 -03:00
2017-03-28 12:29:27 -03:00
2017-03-28 12:29:27 -03:00
2017-01-01 00:14:16 +00:00
2017-03-28 12:29:27 -03:00
2017-03-28 12:29:27 -03:00
2017-03-28 12:29:27 -03:00
2017-03-28 12:29:27 -03:00
2017-10-01 17:46:54 -07:00
2017-10-01 17:46:54 -07:00
2017-01-01 00:14:16 +00:00
2017-10-01 16:12:24 -07:00
2017-03-28 12:29:27 -03:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-10-31 17:49:18 -02:00
2017-11-06 17:37:57 -02:00
2017-01-01 00:14:16 +00:00
2017-05-20 19:04:43 -04:00
2017-01-01 00:14:16 +00:00
2017-05-18 18:06:47 -03:00
2017-11-06 17:37:57 -02:00
2017-11-23 11:20:53 +01:00
2017-11-06 17:37:57 -02:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-10-23 13:31:26 -02:00
2017-01-01 00:14:16 +00:00
2017-05-18 18:06:47 -03:00
2017-01-01 00:14:16 +00:00
2017-10-01 15:08:32 -07:00
2017-10-01 15:08:32 -07:00
2017-01-01 00:14:16 +00:00
2017-11-16 17:51:54 +00:00
2017-11-23 10:00:40 +01:00
2017-08-18 18:38:55 -03:00
2017-01-01 00:14:16 +00:00
2017-10-11 14:27:24 -03:00
2017-01-01 00:14:16 +00:00
2017-03-09 15:22:06 +01:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-10-01 17:48:24 -07:00
2017-01-01 00:14:16 +00:00
2017-06-23 17:38:17 -03:00
2017-05-18 18:06:47 -03:00
2017-11-02 13:55:51 +01:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-06-07 14:05:42 +02:00
2017-06-26 17:52:20 -03:00
2017-03-01 20:32:50 -05:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-11-23 10:00:40 +01:00
2017-11-27 17:14:29 +01:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-05-08 16:44:54 +00:00
2017-06-20 20:32:50 -04:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-02-16 17:33:18 -05:00
2017-08-28 11:58:52 +02:00
2017-10-20 04:10:15 +02:00
2017-10-20 04:10:15 +02:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-11-18 14:34:46 +01:00
2017-11-15 20:47:12 +01:00
2017-11-15 20:47:12 +01:00
2017-11-15 20:47:07 +01:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-11-27 17:14:29 +01:00
2017-05-18 18:06:47 -03:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-08-21 15:37:45 -03:00
2017-08-18 10:53:47 -03:00
2017-10-01 15:54:10 -07:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00
2017-01-01 00:14:16 +00:00