summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVasily Gorbik <gor@linux.ibm.com>2024-11-29 03:07:01 +0300
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2025-02-08 11:58:18 +0300
commit5f72bf80e74bbbe8c7e4732375b070eabf5f275a (patch)
tree4609ff022bf195547df9bb024f6a471e6b89c196
parent1cf21779596859e6bbb291a7d97fbb079f2b8ab1 (diff)
downloadlinux-5f72bf80e74bbbe8c7e4732375b070eabf5f275a.tar.xz
Revert "s390/mm: Allow large pages for KASAN shadow mapping"
commit cc00550b2ae7ab1c7c56669fc004a13d880aaf0a upstream. 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> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--arch/s390/boot/vmem.c12
1 files changed, 1 insertions, 11 deletions
diff --git a/arch/s390/boot/vmem.c b/arch/s390/boot/vmem.c
index 824690427b61..3fa28db2fe59 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,