x86: Add feature_1 to tcbhead_t [BZ #22563]

On x86, padding in struct __jmp_buf_tag is used for shadow stack pointer
to support Shadow Stack in Intel Control-flow Enforcemen Technology.
cancel_jmp_buf has been updated to include saved_mask so that it is as
large as struct __jmp_buf_tag.  We must suport the old cancel_jmp_buf
in existing binaries.  Since symbol versioning doesn't work on
cancel_jmp_buf, feature_1 is added to tcbhead_t so that setjmp and
longjmp can check if shadow stack is enabled.  NB: Shadow stack is
enabled only if all modules are shadow stack enabled.

	[BZ #22563]
	* sysdeps/i386/nptl/tcb-offsets.sym (FEATURE_1_OFFSET): New.
	* sysdeps/i386/nptl/tls.h (tcbhead_t): Add feature_1.
	* sysdeps/x86_64/nptl/tcb-offsets.sym (FEATURE_1_OFFSET): New.
	* sysdeps/x86_64/nptl/tls.h (tcbhead_t): Rename __glibc_unused1
	to feature_1.
This commit is contained in:
H.J. Lu 2017-12-19 02:45:16 -08:00
parent f81ddabffd
commit cba595c350
5 changed files with 19 additions and 1 deletions

View File

@ -1,3 +1,12 @@
2017-12-19 H.J. Lu <hongjiu.lu@intel.com>
[BZ #22563]
* sysdeps/i386/nptl/tcb-offsets.sym (FEATURE_1_OFFSET): New.
* sysdeps/i386/nptl/tls.h (tcbhead_t): Add feature_1.
* sysdeps/x86_64/nptl/tcb-offsets.sym (FEATURE_1_OFFSET): New.
* sysdeps/x86_64/nptl/tls.h (tcbhead_t): Rename __glibc_unused1
to feature_1.
2017-12-19 H.J. Lu <hongjiu.lu@intel.com>
[BZ #22563]

View File

@ -15,3 +15,4 @@ POINTER_GUARD offsetof (tcbhead_t, pointer_guard)
#ifndef __ASSUME_PRIVATE_FUTEX
PRIVATE_FUTEX offsetof (tcbhead_t, private_futex)
#endif
FEATURE_1_OFFSET offsetof (tcbhead_t, feature_1)

View File

@ -50,6 +50,10 @@ typedef struct
void *__private_tm[4];
/* GCC split stack support. */
void *__private_ss;
/* Bit 0: IBT.
Bit 1: SHSTK.
*/
unsigned int feature_1;
} tcbhead_t;
# define TLS_MULTIPLE_THREADS_IN_TCB 1

View File

@ -15,6 +15,7 @@ VGETCPU_CACHE_OFFSET offsetof (tcbhead_t, vgetcpu_cache)
#ifndef __ASSUME_PRIVATE_FUTEX
PRIVATE_FUTEX offsetof (tcbhead_t, private_futex)
#endif
FEATURE_1_OFFSET offsetof (tcbhead_t, feature_1)
-- Not strictly offsets, but these values are also used in the TCB.
TCB_CANCELSTATE_BITMASK CANCELSTATE_BITMASK

View File

@ -56,7 +56,10 @@ typedef struct
# else
int __glibc_reserved1;
# endif
int __glibc_unused1;
/* Bit 0: IBT.
Bit 1: SHSTK.
*/
unsigned int feature_1;
/* Reservation of some values for the TM ABI. */
void *__private_tm[4];
/* GCC split stack support. */