mirror of git://sourceware.org/git/glibc.git
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:
parent
f81ddabffd
commit
cba595c350
|
|
@ -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>
|
2017-12-19 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
[BZ #22563]
|
[BZ #22563]
|
||||||
|
|
|
||||||
|
|
@ -15,3 +15,4 @@ POINTER_GUARD offsetof (tcbhead_t, pointer_guard)
|
||||||
#ifndef __ASSUME_PRIVATE_FUTEX
|
#ifndef __ASSUME_PRIVATE_FUTEX
|
||||||
PRIVATE_FUTEX offsetof (tcbhead_t, private_futex)
|
PRIVATE_FUTEX offsetof (tcbhead_t, private_futex)
|
||||||
#endif
|
#endif
|
||||||
|
FEATURE_1_OFFSET offsetof (tcbhead_t, feature_1)
|
||||||
|
|
|
||||||
|
|
@ -50,6 +50,10 @@ typedef struct
|
||||||
void *__private_tm[4];
|
void *__private_tm[4];
|
||||||
/* GCC split stack support. */
|
/* GCC split stack support. */
|
||||||
void *__private_ss;
|
void *__private_ss;
|
||||||
|
/* Bit 0: IBT.
|
||||||
|
Bit 1: SHSTK.
|
||||||
|
*/
|
||||||
|
unsigned int feature_1;
|
||||||
} tcbhead_t;
|
} tcbhead_t;
|
||||||
|
|
||||||
# define TLS_MULTIPLE_THREADS_IN_TCB 1
|
# define TLS_MULTIPLE_THREADS_IN_TCB 1
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ VGETCPU_CACHE_OFFSET offsetof (tcbhead_t, vgetcpu_cache)
|
||||||
#ifndef __ASSUME_PRIVATE_FUTEX
|
#ifndef __ASSUME_PRIVATE_FUTEX
|
||||||
PRIVATE_FUTEX offsetof (tcbhead_t, private_futex)
|
PRIVATE_FUTEX offsetof (tcbhead_t, private_futex)
|
||||||
#endif
|
#endif
|
||||||
|
FEATURE_1_OFFSET offsetof (tcbhead_t, feature_1)
|
||||||
|
|
||||||
-- Not strictly offsets, but these values are also used in the TCB.
|
-- Not strictly offsets, but these values are also used in the TCB.
|
||||||
TCB_CANCELSTATE_BITMASK CANCELSTATE_BITMASK
|
TCB_CANCELSTATE_BITMASK CANCELSTATE_BITMASK
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,10 @@ typedef struct
|
||||||
# else
|
# else
|
||||||
int __glibc_reserved1;
|
int __glibc_reserved1;
|
||||||
# endif
|
# endif
|
||||||
int __glibc_unused1;
|
/* Bit 0: IBT.
|
||||||
|
Bit 1: SHSTK.
|
||||||
|
*/
|
||||||
|
unsigned int feature_1;
|
||||||
/* Reservation of some values for the TM ABI. */
|
/* Reservation of some values for the TM ABI. */
|
||||||
void *__private_tm[4];
|
void *__private_tm[4];
|
||||||
/* GCC split stack support. */
|
/* GCC split stack support. */
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue