diff options
Diffstat (limited to 'arch/x86/mm/kasan_init_64.c')
| -rw-r--r-- | arch/x86/mm/kasan_init_64.c | 23 | 
1 files changed, 21 insertions, 2 deletions
diff --git a/arch/x86/mm/kasan_init_64.c b/arch/x86/mm/kasan_init_64.c index 99dfed6dfef8..47388f0c0e59 100644 --- a/arch/x86/mm/kasan_init_64.c +++ b/arch/x86/mm/kasan_init_64.c @@ -15,6 +15,7 @@  #include <asm/tlbflush.h>  #include <asm/sections.h>  #include <asm/pgtable.h> +#include <asm/cpu_entry_area.h>  extern struct range pfn_mapped[E820_MAX_ENTRIES]; @@ -277,6 +278,7 @@ void __init kasan_early_init(void)  void __init kasan_init(void)  {  	int i; +	void *shadow_cpu_entry_begin, *shadow_cpu_entry_end;  #ifdef CONFIG_KASAN_INLINE  	register_die_notifier(&kasan_die_notifier); @@ -321,16 +323,33 @@ void __init kasan_init(void)  		map_range(&pfn_mapped[i]);  	} +	shadow_cpu_entry_begin = (void *)CPU_ENTRY_AREA_BASE; +	shadow_cpu_entry_begin = kasan_mem_to_shadow(shadow_cpu_entry_begin); +	shadow_cpu_entry_begin = (void *)round_down((unsigned long)shadow_cpu_entry_begin, +						PAGE_SIZE); + +	shadow_cpu_entry_end = (void *)(CPU_ENTRY_AREA_BASE + +					CPU_ENTRY_AREA_MAP_SIZE); +	shadow_cpu_entry_end = kasan_mem_to_shadow(shadow_cpu_entry_end); +	shadow_cpu_entry_end = (void *)round_up((unsigned long)shadow_cpu_entry_end, +					PAGE_SIZE); +  	kasan_populate_zero_shadow(  		kasan_mem_to_shadow((void *)PAGE_OFFSET + MAXMEM), -		kasan_mem_to_shadow((void *)__START_KERNEL_map)); +		shadow_cpu_entry_begin); + +	kasan_populate_shadow((unsigned long)shadow_cpu_entry_begin, +			      (unsigned long)shadow_cpu_entry_end, 0); + +	kasan_populate_zero_shadow(shadow_cpu_entry_end, +				kasan_mem_to_shadow((void *)__START_KERNEL_map));  	kasan_populate_shadow((unsigned long)kasan_mem_to_shadow(_stext),  			      (unsigned long)kasan_mem_to_shadow(_end),  			      early_pfn_to_nid(__pa(_stext)));  	kasan_populate_zero_shadow(kasan_mem_to_shadow((void *)MODULES_END), -			(void *)KASAN_SHADOW_END); +				(void *)KASAN_SHADOW_END);  	load_cr3(init_top_pgt);  	__flush_tlb_all();  | 

