s390/Kconfig: Select VMAP_STACK unconditionally
authorHeiko Carstens <hca@linux.ibm.com>
Mon, 2 Dec 2024 11:56:38 +0000 (12:56 +0100)
committerAlexander Gordeev <agordeev@linux.ibm.com>
Tue, 10 Dec 2024 14:41:58 +0000 (15:41 +0100)
There is no point in supporting !VMAP_STACK kernel builds. VMAP_STACK has
proven to work since many years. Also, since KASAN_VMALLOC is supported,
kernels built with !VMAP_STACK are completely untested.

Therefore select VMAP_STACK unconditionally and remove all config options
and code required for !VMAP_STACK builds.

Acked-by: Christian Borntraeger <borntraeger@linux.ibm.com>
Reviewed-by: Vasily Gorbik <gor@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
arch/s390/Kconfig
arch/s390/Makefile
arch/s390/kernel/entry.S
arch/s390/kernel/setup.c
arch/s390/kernel/vdso64/Makefile

index e0b2647e069456655e7d23aeacdb0bfdff914938..e4931a32b896045d4b7333c1cff9bae5a8992379 100644 (file)
@@ -256,6 +256,7 @@ config S390
        select USER_STACKTRACE_SUPPORT
        select VDSO_GETRANDOM
        select VIRT_CPU_ACCOUNTING
+       select VMAP_STACK
        select ZONE_DMA
        # Note: keep the above list sorted alphabetically
 
@@ -689,32 +690,6 @@ config MAX_PHYSMEM_BITS
          Increasing the number of bits also increases the kernel image size.
          By default 46 bits (64TB) are supported.
 
-config CHECK_STACK
-       def_bool y
-       depends on !VMAP_STACK
-       prompt "Detect kernel stack overflow"
-       help
-         This option enables the compiler option -mstack-guard and
-         -mstack-size if they are available. If the compiler supports them
-         it will emit additional code to each function prolog to trigger
-         an illegal operation if the kernel stack is about to overflow.
-
-         Say N if you are unsure.
-
-config STACK_GUARD
-       int "Size of the guard area (128-1024)"
-       range 128 1024
-       depends on CHECK_STACK
-       default "256"
-       help
-         This allows you to specify the size of the guard area at the lower
-         end of the kernel stack. If the kernel stack points into the guard
-         area on function entry an illegal operation is triggered. The size
-         needs to be a power of 2. Please keep in mind that the size of an
-         interrupt frame is 184 bytes for 31 bit and 328 bytes on 64 bit.
-         The minimum size for the stack guard should be 256 for 31 bit and
-         512 for 64 bit.
-
 endmenu
 
 menu "I/O subsystem"
index 7fd57398221ea3d9fba3b9852b920ecf5a2c2707..3f25498dac656428b9d8c8a1c542dcb07bc7c82e 100644 (file)
@@ -72,15 +72,6 @@ cflags-$(CONFIG_FRAME_POINTER) += -fno-optimize-sibling-calls
 KBUILD_AFLAGS_DECOMPRESSOR += $(aflags-y)
 KBUILD_CFLAGS_DECOMPRESSOR += $(cflags-y)
 
-ifneq ($(call cc-option,-mstack-size=8192 -mstack-guard=128),)
-  CC_FLAGS_CHECK_STACK := -mstack-size=$(STACK_SIZE)
-  ifeq ($(call cc-option,-mstack-size=8192),)
-    CC_FLAGS_CHECK_STACK += -mstack-guard=$(CONFIG_STACK_GUARD)
-  endif
-  export CC_FLAGS_CHECK_STACK
-  cflags-$(CONFIG_CHECK_STACK) += $(CC_FLAGS_CHECK_STACK)
-endif
-
 ifdef CONFIG_EXPOLINE
   ifdef CONFIG_EXPOLINE_EXTERN
     CC_FLAGS_EXPOLINE := -mindirect-branch=thunk-extern
index 960c08700cf690df11c66b31f809478f8130f2ec..4cc3408c4dacffcc166613a35911053bfc076caf 100644 (file)
@@ -52,16 +52,7 @@ _LPP_OFFSET  = __LC_LPP
                ALT_FACILITY(193)
        .endm
 
-       .macro  CHECK_STACK savearea, lowcore
-#ifdef CONFIG_CHECK_STACK
-       tml     %r15,THREAD_SIZE - CONFIG_STACK_GUARD
-       la      %r14,\savearea(\lowcore)
-       jz      stack_overflow
-#endif
-       .endm
-
        .macro  CHECK_VMAP_STACK savearea, lowcore, oklabel
-#ifdef CONFIG_VMAP_STACK
        lgr     %r14,%r15
        nill    %r14,0x10000 - THREAD_SIZE
        oill    %r14,STACK_INIT_OFFSET
@@ -77,9 +68,6 @@ _LPP_OFFSET   = __LC_LPP
        je      \oklabel
        la      %r14,\savearea(\lowcore)
        j       stack_overflow
-#else
-       j       \oklabel
-#endif
        .endm
 
        /*
@@ -326,8 +314,7 @@ SYM_CODE_START(pgm_check_handler)
        jnz     2f                      # -> enabled, can't be a double fault
        tm      __LC_PGM_ILC+3(%r13),0x80       # check for per exception
        jnz     .Lpgm_svcper            # -> single stepped svc
-2:     CHECK_STACK __LC_SAVE_AREA,%r13
-       aghi    %r15,-(STACK_FRAME_OVERHEAD + __PT_SIZE)
+2:     aghi    %r15,-(STACK_FRAME_OVERHEAD + __PT_SIZE)
        # CHECK_VMAP_STACK branches to stack_overflow or 4f
        CHECK_VMAP_STACK __LC_SAVE_AREA,%r13,4f
 3:     lg      %r15,__LC_KERNEL_STACK(%r13)
@@ -394,8 +381,7 @@ SYM_CODE_START(\name)
        BPENTER __SF_SIE_FLAGS(%r15),_TIF_ISOLATE_BP_GUEST
        SIEEXIT __SF_SIE_CONTROL(%r15),%r13
 #endif
-0:     CHECK_STACK __LC_SAVE_AREA,%r13
-       aghi    %r15,-(STACK_FRAME_OVERHEAD + __PT_SIZE)
+0:     aghi    %r15,-(STACK_FRAME_OVERHEAD + __PT_SIZE)
        j       2f
 1:     lctlg   %c1,%c1,__LC_KERNEL_ASCE(%r13)
        lg      %r15,__LC_KERNEL_STACK(%r13)
@@ -603,7 +589,6 @@ SYM_CODE_END(early_pgm_check_handler)
 
        .section .kprobes.text, "ax"
 
-#if defined(CONFIG_CHECK_STACK) || defined(CONFIG_VMAP_STACK)
 /*
  * The synchronous or the asynchronous stack overflowed. We are dead.
  * No need to properly save the registers, we are going to panic anyway.
@@ -621,7 +606,6 @@ SYM_CODE_START(stack_overflow)
        lgr     %r2,%r11                # pass pointer to pt_regs
        jg      kernel_stack_overflow
 SYM_CODE_END(stack_overflow)
-#endif
 
        .section .data, "aw"
        .balign 4
index a3fea683b22706d742813b1a72fd088978878874..514c149a4636cd6009d1ef1ff270e97a9fcb5dd4 100644 (file)
@@ -359,25 +359,17 @@ void *restart_stack;
 
 unsigned long stack_alloc(void)
 {
-#ifdef CONFIG_VMAP_STACK
        void *ret;
 
        ret = __vmalloc_node(THREAD_SIZE, THREAD_SIZE, THREADINFO_GFP,
                             NUMA_NO_NODE, __builtin_return_address(0));
        kmemleak_not_leak(ret);
        return (unsigned long)ret;
-#else
-       return __get_free_pages(GFP_KERNEL, THREAD_SIZE_ORDER);
-#endif
 }
 
 void stack_free(unsigned long stack)
 {
-#ifdef CONFIG_VMAP_STACK
        vfree((void *) stack);
-#else
-       free_pages(stack, THREAD_SIZE_ORDER);
-#endif
 }
 
 static unsigned long __init stack_alloc_early(void)
index 37bb4b761229759b068797c4584bbb5ae2fad314..ad206f2068d8c0fa1d3319cc1f4dfd27f61d0882 100644 (file)
@@ -5,7 +5,7 @@
 include $(srctree)/lib/vdso/Makefile
 obj-vdso64 = vdso_user_wrapper.o note.o vgetrandom-chacha.o
 obj-cvdso64 = vdso64_generic.o getcpu.o vgetrandom.o
-VDSO_CFLAGS_REMOVE := -pg $(CC_FLAGS_FTRACE) $(CC_FLAGS_EXPOLINE) $(CC_FLAGS_CHECK_STACK)
+VDSO_CFLAGS_REMOVE := -pg $(CC_FLAGS_FTRACE) $(CC_FLAGS_EXPOLINE)
 CFLAGS_REMOVE_getcpu.o = $(VDSO_CFLAGS_REMOVE)
 CFLAGS_REMOVE_vgetrandom.o = $(VDSO_CFLAGS_REMOVE)
 CFLAGS_REMOVE_vdso64_generic.o = $(VDSO_CFLAGS_REMOVE)