Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -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
+5 −0
Original line number Diff line number Diff line
@@ -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
+16 −0
Original line number Diff line number Diff line
@@ -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
+4 −0
Original line number Diff line number Diff line
@@ -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",
+8 −0
Original line number Diff line number Diff line
@@ -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 */
}