diff options
-rw-r--r-- | sysdeps/nptl/dl-tls_init_tp.c | 1 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/rseq-internal.h | 11 |
2 files changed, 6 insertions, 6 deletions
diff --git a/sysdeps/nptl/dl-tls_init_tp.c b/sysdeps/nptl/dl-tls_init_tp.c index 7803e19..ed10185 100644 --- a/sysdeps/nptl/dl-tls_init_tp.c +++ b/sysdeps/nptl/dl-tls_init_tp.c @@ -23,6 +23,7 @@ #include <tls.h> #include <rseq-internal.h> #include <thread_pointer.h> +#include <dl-symbol-redir-ifunc.h> #define TUNABLE_NAMESPACE pthread #include <dl-tunables.h> diff --git a/sysdeps/unix/sysv/linux/rseq-internal.h b/sysdeps/unix/sysv/linux/rseq-internal.h index ef3eab1..76de2b7 100644 --- a/sysdeps/unix/sysv/linux/rseq-internal.h +++ b/sysdeps/unix/sysv/linux/rseq-internal.h @@ -52,13 +52,12 @@ rseq_register_current_thread (struct pthread *self, bool do_rseq) but still expected size 32. */ size = RSEQ_AREA_SIZE_INITIAL; - /* Initialize the rseq fields that are read by the kernel on - registration, there is no guarantee that struct pthread is - cleared on all architectures. */ + /* Initialize the whole rseq area to zero prior to registration. */ + memset (&self->rseq_area, 0, size); + + /* Set the cpu_id field to RSEQ_CPU_ID_UNINITIALIZED, this is checked by + the kernel at registration when CONFIG_DEBUG_RSEQ is enabled. */ THREAD_SETMEM (self, rseq_area.cpu_id, RSEQ_CPU_ID_UNINITIALIZED); - THREAD_SETMEM (self, rseq_area.cpu_id_start, 0); - THREAD_SETMEM (self, rseq_area.rseq_cs, 0); - THREAD_SETMEM (self, rseq_area.flags, 0); int ret = INTERNAL_SYSCALL_CALL (rseq, &self->rseq_area, size, 0, RSEQ_SIG); |