Bug 216190 - 5.19-rc4 kernel + KASAN fails to boot at very early stage when CONFIG_SMP=y is selected (PowerMac G4 3,6)
Summary: 5.19-rc4 kernel + KASAN fails to boot at very early stage when CONFIG_SMP=y i...
Status: RESOLVED CODE_FIX
Alias: None
Product: Platform Specific/Hardware
Classification: Unclassified
Component: PPC-32 (show other bugs)
Hardware: PPC-32 Linux
: P1 normal
Assignee: platform_ppc-32
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2022-06-29 20:04 UTC by Erhard F.
Modified: 2022-08-19 10:17 UTC (History)
1 user (show)

See Also:
Kernel Version: 5.19-rc4
Subsystem:
Regression: No
Bisected commit-id:


Attachments
kernel .config (5.19-rc4, outline KASAN, CONFIG_SMP=y, PowerMac G4 DP) (109.45 KB, text/plain)
2022-06-29 20:04 UTC, Erhard F.
Details
dmesg (5.19-rc4, outline KASAN, without SMP, PowerMac G4 DP) (45.79 KB, text/plain)
2022-06-29 20:05 UTC, Erhard F.
Details

Description Erhard F. 2022-06-29 20:04:22 UTC
Created attachment 301307 [details]
kernel .config (5.19-rc4, outline KASAN, CONFIG_SMP=y, PowerMac G4 DP)

Revisiting bug #215389 and bug #216041 I fiddled around with KASAN builds again and finally may have found a clue.

Kernel 5.19-rc4 runs fine with outline KASAN as long as '# CONFIG_SMP is not set'. It runs perfetly well without any advanced options needed, also setting THREAD_SHIFT manually to 14 is not needed.

As soon as I set CONFIG_SMP=y in the attached .config I get a non-working kernel. It boots but gets stuck very early on a white screen reading
"done
found display: /pci@f0000000/ATY,AlteracParent@10/ATY,Alterac_B@1, opening..."

Interesting thing is that without SMP I also didn't get memory corruption as in bug #215389 nor stack overflows as in bug #216041 after hours of building so far.
Comment 1 Erhard F. 2022-06-29 20:05:20 UTC
Created attachment 301308 [details]
dmesg (5.19-rc4, outline KASAN, without SMP, PowerMac G4 DP)
Comment 2 Christophe Leroy 2022-06-30 18:38:04 UTC
Problem is likely due to commit 4291d085b0b0 ("powerpc/32s: Make pte_update() non atomic on 603 core")

kasan_early_init() calls __set_pte_at(), which calls pte_update() if CONFIG_SMP, and pte_update() calls mmu_has_feature() since above commit, but that's too early for calling mmu_has_feature() so mmu_has_feature() tries to warn using printk(), but that cannot work because the KASAN shadow is not set.

Can you try with the change below ?

diff --git a/arch/powerpc/mm/kasan/init_32.c b/arch/powerpc/mm/kasan/init_32.c
index f3e4d069e0ba..a70828a6d935 100644
--- a/arch/powerpc/mm/kasan/init_32.c
+++ b/arch/powerpc/mm/kasan/init_32.c
@@ -25,7 +25,7 @@ static void __init kasan_populate_pte(pte_t *ptep, pgprot_t prot)
 	int i;
 
 	for (i = 0; i < PTRS_PER_PTE; i++, ptep++)
-		__set_pte_at(&init_mm, va, ptep, pfn_pte(PHYS_PFN(pa), prot), 0);
+		__set_pte_at(&init_mm, va, ptep, pfn_pte(PHYS_PFN(pa), prot), 1);
 }
 
 int __init kasan_init_shadow_page_tables(unsigned long k_start, unsigned long k_end)
Comment 3 Erhard F. 2022-07-03 21:24:39 UTC
(In reply to Christophe Leroy from comment #2)
> Problem is likely due to commit 4291d085b0b0 ("powerpc/32s: Make
> pte_update() non atomic on 603 core")
> 
> kasan_early_init() calls __set_pte_at(), which calls pte_update() if
> CONFIG_SMP, and pte_update() calls mmu_has_feature() since above commit, but
> that's too early for calling mmu_has_feature() so mmu_has_feature() tries to
> warn using printk(), but that cannot work because the KASAN shadow is not
> set.
> 
> Can you try with the change below ?
Applied your patch on top of 5.19-rc4 and can confirm it works. Thanks!

I'll close here as soon it is in the -rcs.
Comment 4 Erhard F. 2022-08-19 10:17:02 UTC
Patch landed in stable (v5.19.2) meanwhile.

Closing here.

Note You need to log in before you can comment on or make changes to this bug.