]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
x32/cet: Support shadow stack during startup for Linux 6.10
authorH.J. Lu <hjl.tools@gmail.com>
Tue, 23 Jul 2024 00:47:22 +0000 (17:47 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Thu, 25 Jul 2024 07:17:21 +0000 (00:17 -0700)
Use RXX_LP in RTLD_START_ENABLE_X86_FEATURES.  Support shadow stack during
startup for Linux 6.10:

commit 2883f01ec37dd8668e7222dfdb5980c86fdfe277
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Fri Mar 15 07:04:33 2024 -0700

    x86/shstk: Enable shadow stacks for x32

    1. Add shadow stack support to x32 signal.
    2. Use the 64-bit map_shadow_stack syscall for x32.
    3. Set up shadow stack for x32.

Add the map_shadow_stack system call to <fixup-asm-unistd.h> and regenerate
arch-syscall.h.  Tested on Intel Tiger Lake with CET enabled x32.  There
are no regressions with CET enabled x86-64.  There are no changes in CET
enabled x86-64 _dl_start_user.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
Reviewed-by: Noah Goldstein <goldstein.w.n@gmail.com>
sysdeps/unix/sysv/linux/x86_64/dl-cet.h
sysdeps/unix/sysv/linux/x86_64/x32/arch-syscall.h
sysdeps/unix/sysv/linux/x86_64/x32/fixup-asm-unistd.h

index 1fe313340611d9c569b7761bf8670337efc22b7b..b4f7e6c9cd7548a27e8f5fdb7be3b01524293073 100644 (file)
@@ -92,9 +92,9 @@ dl_cet_ibt_enabled (void)
        # Pass GL(dl_x86_feature_1) to _dl_cet_setup_features.\n\
        movl %edx, %edi\n\
        # Align stack for the _dl_cet_setup_features call.\n\
-       andq $-16, %rsp\n\
+       and $-16, %" RSP_LP "\n\
        call _dl_cet_setup_features\n\
        # Restore %rax and %rsp from %r12 and %r13.\n\
-       movq %r12, %rax\n\
-       movq %r13, %rsp\n\
+       mov %" R12_LP ", %" RAX_LP "\n\
+       mov %" R13_LP ", %" RSP_LP "\n\
 "
index 3040a47d72465257950ca033fe678a9346e6e980..df3e22236dd3bb0e61c8f39570a36068413a89ce 100644 (file)
 #define __NR_lsm_set_self_attr 1073742284
 #define __NR_lstat 1073741830
 #define __NR_madvise 1073741852
+#define __NR_map_shadow_stack 1073742277
 #define __NR_mbind 1073742061
 #define __NR_membarrier 1073742148
 #define __NR_memfd_create 1073742143
index 98124169e6035ea8bff3b6ac011aa8af7105bfd8..47fa8af4ce9af68e731cc1003669ed65377ecd5c 100644 (file)
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#ifndef __NR_map_shadow_stack
+# define __NR_map_shadow_stack 1073742277
+#endif
+
 /* X32 uses the same 64-bit syscall interface for set_thread_area.   */
 #ifndef __NR_set_thread_area
 # define __NR_set_thread_area 1073742029