@@ -129,6 +129,31 @@ static void __init kasan_remap_early_shadow_ro(void)
129129 flush_tlb_kernel_range (KASAN_SHADOW_START , KASAN_SHADOW_END );
130130}
131131
132+ static void __init kasan_unmap_early_shadow_vmalloc (void )
133+ {
134+ unsigned long k_start = (unsigned long )kasan_mem_to_shadow ((void * )VMALLOC_START );
135+ unsigned long k_end = (unsigned long )kasan_mem_to_shadow ((void * )VMALLOC_END );
136+ unsigned long k_cur ;
137+ phys_addr_t pa = __pa (kasan_early_shadow_page );
138+
139+ if (!early_mmu_has_feature (MMU_FTR_HPTE_TABLE )) {
140+ int ret = kasan_init_shadow_page_tables (k_start , k_end );
141+
142+ if (ret )
143+ panic ("kasan: kasan_init_shadow_page_tables() failed" );
144+ }
145+ for (k_cur = k_start & PAGE_MASK ; k_cur < k_end ; k_cur += PAGE_SIZE ) {
146+ pmd_t * pmd = pmd_offset (pud_offset (pgd_offset_k (k_cur ), k_cur ), k_cur );
147+ pte_t * ptep = pte_offset_kernel (pmd , k_cur );
148+
149+ if ((pte_val (* ptep ) & PTE_RPN_MASK ) != pa )
150+ continue ;
151+
152+ __set_pte_at (& init_mm , k_cur , ptep , __pte (0 ), 0 );
153+ }
154+ flush_tlb_kernel_range (k_start , k_end );
155+ }
156+
132157void __init kasan_mmu_init (void )
133158{
134159 int ret ;
@@ -165,7 +190,13 @@ void __init kasan_init(void)
165190 pr_info ("KASAN init done\n" );
166191}
167192
168- #ifdef CONFIG_MODULES
193+ void __init kasan_late_init (void )
194+ {
195+ if (IS_ENABLED (CONFIG_KASAN_VMALLOC ))
196+ kasan_unmap_early_shadow_vmalloc ();
197+ }
198+
199+ #if defined(CONFIG_MODULES ) && !defined(CONFIG_KASAN_VMALLOC )
169200void * module_alloc (unsigned long size )
170201{
171202 void * base ;
0 commit comments