s390: enable HAVE_ARCH_STACKLEAK
authorHeiko Carstens <hca@linux.ibm.com>
Mon, 27 Mar 2023 09:37:28 +0000 (11:37 +0200)
committerVasily Gorbik <gor@linux.ibm.com>
Tue, 4 Apr 2023 16:34:56 +0000 (18:34 +0200)
Add support for the stackleak feature. Whenever the kernel returns to user
space the kernel stack is filled with a poison value.

Enabling this feature is quite expensive: e.g. after instrumenting the
getpid() system call function to have a 4kb stack the result is an
increased runtime of the system call by a factor of 3.

Reviewed-by: Vasily Gorbik <gor@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
arch/s390/Kconfig
arch/s390/kernel/entry.S

index d610f91..d4db47b 100644 (file)
@@ -155,6 +155,7 @@ config S390
        select HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET
        select HAVE_ARCH_SECCOMP_FILTER
        select HAVE_ARCH_SOFT_DIRTY
+       select HAVE_ARCH_STACKLEAK
        select HAVE_ARCH_TRACEHOOK
        select HAVE_ARCH_TRANSPARENT_HUGEPAGE
        select HAVE_ARCH_VMAP_STACK
index fc3d1df..d5f8cd4 100644 (file)
@@ -150,6 +150,12 @@ _LPP_OFFSET        = __LC_LPP
        .endm
 #endif
 
+       .macro STACKLEAK_ERASE
+#ifdef CONFIG_GCC_PLUGIN_STACKLEAK
+       brasl   %r14,stackleak_erase_on_task_stack
+#endif
+       .endm
+
        GEN_BR_THUNK %r14
 
        .section .kprobes.text, "ax"
@@ -300,6 +306,7 @@ ENTRY(system_call)
        MBEAR   %r2
        lgr     %r3,%r14
        brasl   %r14,__do_syscall
+       STACKLEAK_ERASE
        lctlg   %c1,%c1,__LC_USER_ASCE
        mvc     __LC_RETURN_PSW(16),STACK_FRAME_OVERHEAD+__PT_PSW(%r15)
        BPON
@@ -315,6 +322,7 @@ ENDPROC(system_call)
 ENTRY(ret_from_fork)
        lgr     %r3,%r11
        brasl   %r14,__ret_from_fork
+       STACKLEAK_ERASE
        lctlg   %c1,%c1,__LC_USER_ASCE
        mvc     __LC_RETURN_PSW(16),STACK_FRAME_OVERHEAD+__PT_PSW(%r15)
        BPON
@@ -375,6 +383,7 @@ ENTRY(pgm_check_handler)
        brasl   %r14,__do_pgm_check
        tmhh    %r8,0x0001              # returning to user space?
        jno     .Lpgm_exit_kernel
+       STACKLEAK_ERASE
        lctlg   %c1,%c1,__LC_USER_ASCE
        BPON
        stpt    __LC_EXIT_TIMER
@@ -440,6 +449,7 @@ ENTRY(\name)
        mvc     __LC_RETURN_PSW(16),__PT_PSW(%r11)
        tmhh    %r8,0x0001              # returning to user ?
        jno     2f
+       STACKLEAK_ERASE
        lctlg   %c1,%c1,__LC_USER_ASCE
        BPON
        stpt    __LC_EXIT_TIMER