s390/smp: kasan stack instrumentation support
authorVasily Gorbik <gor@linux.ibm.com>
Mon, 20 Nov 2017 11:13:52 +0000 (12:13 +0100)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Tue, 9 Oct 2018 09:21:26 +0000 (11:21 +0200)
smp_start_secondary function is called without DAT enabled. To avoid
disabling kasan instrumentation for entire arch/s390/kernel/smp.c
smp_start_secondary has been split in 2 parts. smp_start_secondary has
instrumentation disabled, it does minimal setup and enables DAT. Then
instrumentated __smp_start_secondary is called to do the rest.

__load_psw_mask function instrumentation has been disabled as well
to be able to call it from smp_start_secondary.

Reviewed-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/include/asm/processor.h
arch/s390/kernel/smp.c

index 43494a014d5b190b76c0c5d4c0e9ea730db58892..55956c96558cd422d80c4a89ab5ecc170328c1ab 100644 (file)
@@ -336,7 +336,7 @@ static inline void __load_psw(psw_t psw)
  * Set PSW mask to specified value, while leaving the
  * PSW addr pointing to the next instruction.
  */
-static inline void __load_psw_mask(unsigned long mask)
+static __no_sanitize_address_or_inline void __load_psw_mask(unsigned long mask)
 {
        unsigned long addr;
        psw_t psw;
index 032d98bfc60af89bbc20a045637bd6b710cbb022..c98059faee460079688ff957a1c9eb2b2d90966a 100644 (file)
@@ -804,6 +804,8 @@ static void smp_init_secondary(void)
 {
        int cpu = smp_processor_id();
 
+       S390_lowcore.last_update_clock = get_tod_clock();
+       restore_access_regs(S390_lowcore.access_regs_save_area);
        cpu_init();
        preempt_disable();
        init_cpu_timer();
@@ -823,14 +825,12 @@ static void smp_init_secondary(void)
 /*
  *     Activate a secondary processor.
  */
-static void smp_start_secondary(void *cpuvoid)
+static void __no_sanitize_address smp_start_secondary(void *cpuvoid)
 {
-       S390_lowcore.last_update_clock = get_tod_clock();
        S390_lowcore.restart_stack = (unsigned long) restart_stack;
        S390_lowcore.restart_fn = (unsigned long) do_restart;
        S390_lowcore.restart_data = 0;
        S390_lowcore.restart_source = -1UL;
-       restore_access_regs(S390_lowcore.access_regs_save_area);
        __ctl_load(S390_lowcore.cregs_save_area, 0, 15);
        __load_psw_mask(PSW_KERNEL_BITS | PSW_MASK_DAT);
        CALL_ON_STACK(smp_init_secondary, S390_lowcore.kernel_stack, 0);