|
Miroslav Franc |
eaf6fd |
From: Vasily Gorbik <gor@linux.ibm.com>
|
|
Miroslav Franc |
eaf6fd |
Date: Wed, 17 Jun 2020 15:05:49 +0200
|
|
Miroslav Franc |
eaf6fd |
Subject: s390/kasan: fix early pgm check handler execution
|
|
Miroslav Franc |
eaf6fd |
Git-commit: 998f5bbe3dbdab81c1cfb1aef7c3892f5d24f6c7
|
|
Miroslav Franc |
eaf6fd |
Patch-mainline: v5.8-rc3
|
|
Miroslav Franc |
eaf6fd |
References: git-fixes bsc#1211360
|
|
Miroslav Franc |
eaf6fd |
|
|
Miroslav Franc |
eaf6fd |
Currently if early_pgm_check_handler is called it ends up in pgm check
|
|
Miroslav Franc |
eaf6fd |
loop. The problem is that early_pgm_check_handler is instrumented by
|
|
Miroslav Franc |
eaf6fd |
KASAN but executed without DAT flag enabled which leads to addressing
|
|
Miroslav Franc |
eaf6fd |
exception when KASAN checks try to access shadow memory.
|
|
Miroslav Franc |
eaf6fd |
|
|
Miroslav Franc |
eaf6fd |
Fix that by executing early handlers with DAT flag on under KASAN as
|
|
Miroslav Franc |
eaf6fd |
expected.
|
|
Miroslav Franc |
eaf6fd |
|
|
Miroslav Franc |
eaf6fd |
Reported-and-tested-by: Alexander Egorenkov <egorenar@linux.ibm.com>
|
|
Miroslav Franc |
eaf6fd |
Reviewed-by: Heiko Carstens <heiko.carstens@de.ibm.com>
|
|
Miroslav Franc |
eaf6fd |
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
|
|
Miroslav Franc |
eaf6fd |
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
|
|
Miroslav Franc |
eaf6fd |
Acked-by: Miroslav Franc <mfranc@suse.cz>
|
|
Miroslav Franc |
eaf6fd |
---
|
|
Miroslav Franc |
eaf6fd |
arch/s390/kernel/early.c | 2 ++
|
|
Miroslav Franc |
eaf6fd |
1 file changed, 2 insertions(+)
|
|
Miroslav Franc |
eaf6fd |
|
|
Miroslav Franc |
eaf6fd |
diff --git a/arch/s390/kernel/early.c b/arch/s390/kernel/early.c
|
|
Miroslav Franc |
eaf6fd |
index cd241ee66eff..078277231858 100644
|
|
Miroslav Franc |
eaf6fd |
--- a/arch/s390/kernel/early.c
|
|
Miroslav Franc |
eaf6fd |
+++ b/arch/s390/kernel/early.c
|
|
Miroslav Franc |
eaf6fd |
@@ -170,6 +170,8 @@ static noinline __init void setup_lowcore_early(void)
|
|
Miroslav Franc |
eaf6fd |
psw_t psw;
|
|
Miroslav Franc |
eaf6fd |
|
|
Miroslav Franc |
eaf6fd |
psw.mask = PSW_MASK_BASE | PSW_DEFAULT_KEY | PSW_MASK_EA | PSW_MASK_BA;
|
|
Miroslav Franc |
eaf6fd |
+ if (IS_ENABLED(CONFIG_KASAN))
|
|
Miroslav Franc |
eaf6fd |
+ psw.mask |= PSW_MASK_DAT;
|
|
Miroslav Franc |
eaf6fd |
psw.addr = (unsigned long) s390_base_ext_handler;
|
|
Miroslav Franc |
eaf6fd |
S390_lowcore.external_new_psw = psw;
|
|
Miroslav Franc |
eaf6fd |
psw.addr = (unsigned long) s390_base_pgm_handler;
|
|
Miroslav Franc |
eaf6fd |
|