We want to rework how set_pXd() behaves for generic compile-time folded page tables by disallowing its use and triggering a compile-time error when it is used improperly, ensuring that the actual first-level set_pXd() function is used instead.
Therefore, call the proper set_pXd() in case of folded pgtable to setup early kasan first-level pgtable with pXd_present() There should be no functional change. Signed-off-by: Yeoreum Yun <[email protected]> --- arch/arm64/mm/kasan_init.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/arch/arm64/mm/kasan_init.c b/arch/arm64/mm/kasan_init.c index 3fcad956fdf7c..c77ba4ab643b5 100644 --- a/arch/arm64/mm/kasan_init.c +++ b/arch/arm64/mm/kasan_init.c @@ -216,10 +216,32 @@ asmlinkage void __init kasan_early_init(void) */ static pte_t tbl[PTRS_PER_PTE] __bss_pgtbl; pgd_t *pgdp = pgd_offset_k(KASAN_SHADOW_START); - - set_pgd(pgdp, __pgd(__pa_symbol(tbl) | PGD_TYPE_TABLE)); + p4d_t *p4dp; + pud_t *pudp; + pmd_t *pmdp; + + if (CONFIG_PGTABLE_LEVELS == 5 && pgtable_l5_enabled()) { + set_pgd(pgdp, __pgd(__pa_symbol(tbl) | PGD_TYPE_TABLE)); + goto populate; + } + + p4dp = p4d_offset(pgdp, KASAN_SHADOW_START); + if (CONFIG_PGTABLE_LEVELS >= 4 && pgtable_l4_enabled()) { + set_p4d(p4dp, __p4d(__pa_symbol(tbl) | P4D_TYPE_TABLE)); + goto populate; + } + + pudp = pud_offset(p4dp, KASAN_SHADOW_START); + if (CONFIG_PGTABLE_LEVELS >= 3) { + set_pud(pudp, __pud(__pa_symbol(tbl) | PUD_TYPE_TABLE)); + goto populate; + } + + pmdp = pmd_offset(pudp, KASAN_SHADOW_START); + set_pmd(pmdp, __pmd(__pa_symbol(tbl) | PMD_TYPE_TABLE)); } +populate: kasan_pgd_populate(KASAN_SHADOW_START, KASAN_SHADOW_END, NUMA_NO_NODE, true); } -- LEVI:{C3F47F37-75D8-414A-A8BA-3980EC8A46D7}
