diff options
author | Vasily Gorbik <gor@linux.ibm.com> | 2024-11-29 01:07:01 +0100 |
---|---|---|
committer | Heiko Carstens <hca@linux.ibm.com> | 2024-11-29 13:41:11 +0100 |
commit | cc00550b2ae7ab1c7c56669fc004a13d880aaf0a (patch) | |
tree | a1e62d6a47a438b5f1b14b646b8cd26857f739a1 /arch | |
parent | 889221c4d78d754023bec8edec13d11a13b3fb51 (diff) |
Revert "s390/mm: Allow large pages for KASAN shadow mapping"
This reverts commit ff123eb7741638d55abf82fac090bb3a543c1e74.
Allowing large pages for KASAN shadow mappings isn't inherently wrong,
but adding POPULATE_KASAN_MAP_SHADOW to large_allowed() exposes an issue
in can_large_pud() and can_large_pmd().
Since commit d8073dc6bc04 ("s390/mm: Allow large pages only for aligned
physical addresses"), both can_large_pud() and can_large_pmd() call _pa()
to check if large page physical addresses are aligned. However, _pa()
has a side effect: it allocates memory in POPULATE_KASAN_MAP_SHADOW
mode. This results in massive memory leaks.
The proper fix would be to address both large_allowed() and _pa()'s side
effects, but for now, revert this change to avoid the leaks.
Fixes: ff123eb77416 ("s390/mm: Allow large pages for KASAN shadow mapping")
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/s390/boot/vmem.c | 12 |
1 files changed, 1 insertions, 11 deletions
diff --git a/arch/s390/boot/vmem.c b/arch/s390/boot/vmem.c index 8476b6f965a9..145035f84a0e 100644 --- a/arch/s390/boot/vmem.c +++ b/arch/s390/boot/vmem.c @@ -264,17 +264,7 @@ static unsigned long _pa(unsigned long addr, unsigned long size, enum populate_m static bool large_allowed(enum populate_mode mode) { - switch (mode) { - case POPULATE_DIRECT: - case POPULATE_IDENTITY: - case POPULATE_KERNEL: -#ifdef CONFIG_KASAN - case POPULATE_KASAN_MAP_SHADOW: -#endif - return true; - default: - return false; - } + return (mode == POPULATE_DIRECT) || (mode == POPULATE_IDENTITY) || (mode == POPULATE_KERNEL); } static bool can_large_pud(pud_t *pu_dir, unsigned long addr, unsigned long end, |