| From f58cdf218bb86193359acfbb258f9c2478d75f79 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 17 Jun 2020 15:05:49 +0200 |
| Subject: s390/kasan: fix early pgm check handler execution |
| |
| From: Vasily Gorbik <gor@linux.ibm.com> |
| |
| [ Upstream commit 998f5bbe3dbdab81c1cfb1aef7c3892f5d24f6c7 ] |
| |
| Currently if early_pgm_check_handler is called it ends up in pgm check |
| loop. The problem is that early_pgm_check_handler is instrumented by |
| KASAN but executed without DAT flag enabled which leads to addressing |
| exception when KASAN checks try to access shadow memory. |
| |
| Fix that by executing early handlers with DAT flag on under KASAN as |
| expected. |
| |
| Reported-and-tested-by: Alexander Egorenkov <egorenar@linux.ibm.com> |
| Reviewed-by: Heiko Carstens <heiko.carstens@de.ibm.com> |
| Signed-off-by: Vasily Gorbik <gor@linux.ibm.com> |
| Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| arch/s390/kernel/early.c | 2 ++ |
| 1 file changed, 2 insertions(+) |
| |
| diff --git a/arch/s390/kernel/early.c b/arch/s390/kernel/early.c |
| index b432d63d0b373..2531776cf6cf9 100644 |
| --- a/arch/s390/kernel/early.c |
| +++ b/arch/s390/kernel/early.c |
| @@ -169,6 +169,8 @@ static noinline __init void setup_lowcore_early(void) |
| psw_t psw; |
| |
| psw.mask = PSW_MASK_BASE | PSW_DEFAULT_KEY | PSW_MASK_EA | PSW_MASK_BA; |
| + if (IS_ENABLED(CONFIG_KASAN)) |
| + psw.mask |= PSW_MASK_DAT; |
| psw.addr = (unsigned long) s390_base_ext_handler; |
| S390_lowcore.external_new_psw = psw; |
| psw.addr = (unsigned long) s390_base_pgm_handler; |
| -- |
| 2.25.1 |
| |