diff options
Diffstat (limited to 'arch/arm64/mm/kasan_init.c')
-rw-r--r-- | arch/arm64/mm/kasan_init.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/arch/arm64/mm/kasan_init.c b/arch/arm64/mm/kasan_init.c index cf038c7d9fa9..cab7a5be40aa 100644 --- a/arch/arm64/mm/kasan_init.c +++ b/arch/arm64/mm/kasan_init.c | |||
@@ -120,6 +120,7 @@ static void __init cpu_set_ttbr1(unsigned long ttbr1) | |||
120 | void __init kasan_init(void) | 120 | void __init kasan_init(void) |
121 | { | 121 | { |
122 | struct memblock_region *reg; | 122 | struct memblock_region *reg; |
123 | int i; | ||
123 | 124 | ||
124 | /* | 125 | /* |
125 | * We are going to perform proper setup of shadow memory. | 126 | * We are going to perform proper setup of shadow memory. |
@@ -155,6 +156,14 @@ void __init kasan_init(void) | |||
155 | pfn_to_nid(virt_to_pfn(start))); | 156 | pfn_to_nid(virt_to_pfn(start))); |
156 | } | 157 | } |
157 | 158 | ||
159 | /* | ||
160 | * KAsan may reuse the contents of kasan_zero_pte directly, so we | ||
161 | * should make sure that it maps the zero page read-only. | ||
162 | */ | ||
163 | for (i = 0; i < PTRS_PER_PTE; i++) | ||
164 | set_pte(&kasan_zero_pte[i], | ||
165 | pfn_pte(virt_to_pfn(kasan_zero_page), PAGE_KERNEL_RO)); | ||
166 | |||
158 | memset(kasan_zero_page, 0, PAGE_SIZE); | 167 | memset(kasan_zero_page, 0, PAGE_SIZE); |
159 | cpu_set_ttbr1(__pa(swapper_pg_dir)); | 168 | cpu_set_ttbr1(__pa(swapper_pg_dir)); |
160 | flush_tlb_all(); | 169 | flush_tlb_all(); |