powerpc/32: prepare shadow area for KASAN
This patch prepares a shadow area for KASAN. The shadow area will be at the top of the kernel virtual memory space above the fixmap area and will occupy one eighth of the total kernel virtual memory space. Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
Родитель
a67beca077
Коммит
b4abe38fd6
|
@ -366,3 +366,8 @@ config PPC_FAST_ENDIAN_SWITCH
|
|||
depends on DEBUG_KERNEL && PPC_BOOK3S_64
|
||||
help
|
||||
If you're unsure what this is, say N.
|
||||
|
||||
config KASAN_SHADOW_OFFSET
|
||||
hex
|
||||
depends on KASAN
|
||||
default 0xe0000000
|
||||
|
|
|
@ -22,7 +22,12 @@
|
|||
#include <asm/kmap_types.h>
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_KASAN
|
||||
#include <asm/kasan.h>
|
||||
#define FIXADDR_TOP (KASAN_SHADOW_START - PAGE_SIZE)
|
||||
#else
|
||||
#define FIXADDR_TOP ((unsigned long)(-PAGE_SIZE))
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Here we define all the compile-time 'special' virtual
|
||||
|
|
|
@ -12,4 +12,20 @@
|
|||
#define EXPORT_SYMBOL_KASAN(fn)
|
||||
#endif
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
#include <asm/page.h>
|
||||
|
||||
#define KASAN_SHADOW_SCALE_SHIFT 3
|
||||
|
||||
#define KASAN_SHADOW_START (KASAN_SHADOW_OFFSET + \
|
||||
(PAGE_OFFSET >> KASAN_SHADOW_SCALE_SHIFT))
|
||||
|
||||
#define KASAN_SHADOW_OFFSET ASM_CONST(CONFIG_KASAN_SHADOW_OFFSET)
|
||||
|
||||
#define KASAN_SHADOW_END 0UL
|
||||
|
||||
#define KASAN_SHADOW_SIZE (KASAN_SHADOW_END - KASAN_SHADOW_START)
|
||||
|
||||
#endif /* __ASSEMBLY */
|
||||
#endif
|
||||
|
|
|
@ -310,6 +310,10 @@ void __init mem_init(void)
|
|||
mem_init_print_info(NULL);
|
||||
#ifdef CONFIG_PPC32
|
||||
pr_info("Kernel virtual memory layout:\n");
|
||||
#ifdef CONFIG_KASAN
|
||||
pr_info(" * 0x%08lx..0x%08lx : kasan shadow mem\n",
|
||||
KASAN_SHADOW_START, KASAN_SHADOW_END);
|
||||
#endif
|
||||
pr_info(" * 0x%08lx..0x%08lx : fixmap\n", FIXADDR_START, FIXADDR_TOP);
|
||||
#ifdef CONFIG_HIGHMEM
|
||||
pr_info(" * 0x%08lx..0x%08lx : highmem PTEs\n",
|
||||
|
|
|
@ -100,6 +100,10 @@ static struct addr_marker address_markers[] = {
|
|||
#endif
|
||||
{ 0, "Fixmap start" },
|
||||
{ 0, "Fixmap end" },
|
||||
#endif
|
||||
#ifdef CONFIG_KASAN
|
||||
{ 0, "kasan shadow mem start" },
|
||||
{ 0, "kasan shadow mem end" },
|
||||
#endif
|
||||
{ -1, NULL },
|
||||
};
|
||||
|
@ -323,6 +327,10 @@ static void populate_markers(void)
|
|||
#endif
|
||||
address_markers[i++].start_address = FIXADDR_START;
|
||||
address_markers[i++].start_address = FIXADDR_TOP;
|
||||
#ifdef CONFIG_KASAN
|
||||
address_markers[i++].start_address = KASAN_SHADOW_START;
|
||||
address_markers[i++].start_address = KASAN_SHADOW_END;
|
||||
#endif
|
||||
#endif /* CONFIG_PPC64 */
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче