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}


Reply via email to