s390/kasan: reipl and kexec support
Some functions from both arch/s390/kernel/ipl.c and arch/s390/kernel/machine_kexec.c are called without DAT enabled (or with and without DAT enabled code paths). There is no easy way to partially disable kasan for those files without a substantial rework. Disable kasan for both files for now. To avoid disabling kasan for arch/s390/kernel/diag.c DAT flag is enabled in diag308 call. pcpu_delegate which disables DAT is marked with __no_sanitize_address to disable instrumentation for that one function. Signed-off-by: Vasily Gorbik <gor@linux.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
9e8df6daed
commit
ac1256f826
|
@ -242,7 +242,7 @@ static inline unsigned long current_stack_pointer(void)
|
|||
return sp;
|
||||
}
|
||||
|
||||
static inline unsigned short stap(void)
|
||||
static __no_sanitize_address_or_inline unsigned short stap(void)
|
||||
{
|
||||
unsigned short cpu_address;
|
||||
|
||||
|
|
|
@ -24,6 +24,8 @@ UBSAN_SANITIZE_early.o := n
|
|||
UBSAN_SANITIZE_early_nobss.o := n
|
||||
|
||||
KASAN_SANITIZE_early_nobss.o := n
|
||||
KASAN_SANITIZE_ipl.o := n
|
||||
KASAN_SANITIZE_machine_kexec.o := n
|
||||
|
||||
#
|
||||
# Passing null pointers is ok for smp code, since we access the lowcore here.
|
||||
|
|
|
@ -156,6 +156,8 @@ static inline int __diag308(unsigned long subcode, void *addr)
|
|||
|
||||
int diag308(unsigned long subcode, void *addr)
|
||||
{
|
||||
if (IS_ENABLED(CONFIG_KASAN))
|
||||
__arch_local_irq_stosm(0x04); /* enable DAT */
|
||||
diag_stat_inc(DIAG_STAT_X308);
|
||||
return __diag308(subcode, addr);
|
||||
}
|
||||
|
|
|
@ -313,8 +313,9 @@ static void __pcpu_delegate(void (*func)(void*), void *data)
|
|||
func(data); /* should not return */
|
||||
}
|
||||
|
||||
static void pcpu_delegate(struct pcpu *pcpu, void (*func)(void *),
|
||||
void *data, unsigned long stack)
|
||||
static void __no_sanitize_address pcpu_delegate(struct pcpu *pcpu,
|
||||
void (*func)(void *),
|
||||
void *data, unsigned long stack)
|
||||
{
|
||||
struct lowcore *lc = lowcore_ptr[pcpu - pcpu_devices];
|
||||
unsigned long source_cpu = stap();
|
||||
|
|
Loading…
Reference in New Issue