Commit b4abe38f authored by Christophe Leroy's avatar Christophe Leroy Committed by Michael Ellerman

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: default avatarChristophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
parent a67beca0
...@@ -366,3 +366,8 @@ config PPC_FAST_ENDIAN_SWITCH ...@@ -366,3 +366,8 @@ config PPC_FAST_ENDIAN_SWITCH
depends on DEBUG_KERNEL && PPC_BOOK3S_64 depends on DEBUG_KERNEL && PPC_BOOK3S_64
help help
If you're unsure what this is, say N. If you're unsure what this is, say N.
config KASAN_SHADOW_OFFSET
hex
depends on KASAN
default 0xe0000000
...@@ -22,7 +22,12 @@ ...@@ -22,7 +22,12 @@
#include <asm/kmap_types.h> #include <asm/kmap_types.h>
#endif #endif
#ifdef CONFIG_KASAN
#include <asm/kasan.h>
#define FIXADDR_TOP (KASAN_SHADOW_START - PAGE_SIZE)
#else
#define FIXADDR_TOP ((unsigned long)(-PAGE_SIZE)) #define FIXADDR_TOP ((unsigned long)(-PAGE_SIZE))
#endif
/* /*
* Here we define all the compile-time 'special' virtual * Here we define all the compile-time 'special' virtual
......
...@@ -12,4 +12,20 @@ ...@@ -12,4 +12,20 @@
#define EXPORT_SYMBOL_KASAN(fn) #define EXPORT_SYMBOL_KASAN(fn)
#endif #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 #endif
...@@ -310,6 +310,10 @@ void __init mem_init(void) ...@@ -310,6 +310,10 @@ void __init mem_init(void)
mem_init_print_info(NULL); mem_init_print_info(NULL);
#ifdef CONFIG_PPC32 #ifdef CONFIG_PPC32
pr_info("Kernel virtual memory layout:\n"); 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); pr_info(" * 0x%08lx..0x%08lx : fixmap\n", FIXADDR_START, FIXADDR_TOP);
#ifdef CONFIG_HIGHMEM #ifdef CONFIG_HIGHMEM
pr_info(" * 0x%08lx..0x%08lx : highmem PTEs\n", pr_info(" * 0x%08lx..0x%08lx : highmem PTEs\n",
......
...@@ -100,6 +100,10 @@ static struct addr_marker address_markers[] = { ...@@ -100,6 +100,10 @@ static struct addr_marker address_markers[] = {
#endif #endif
{ 0, "Fixmap start" }, { 0, "Fixmap start" },
{ 0, "Fixmap end" }, { 0, "Fixmap end" },
#endif
#ifdef CONFIG_KASAN
{ 0, "kasan shadow mem start" },
{ 0, "kasan shadow mem end" },
#endif #endif
{ -1, NULL }, { -1, NULL },
}; };
...@@ -323,6 +327,10 @@ static void populate_markers(void) ...@@ -323,6 +327,10 @@ static void populate_markers(void)
#endif #endif
address_markers[i++].start_address = FIXADDR_START; address_markers[i++].start_address = FIXADDR_START;
address_markers[i++].start_address = FIXADDR_TOP; 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 */ #endif /* CONFIG_PPC64 */
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment