linux/arch/loongarch
Tiezhu Yang eaa9fcf579 LoongArch: Rework KASAN initialization for PTW-enabled systems
commit 5ec5ac4ca2 upstream.

kasan_init_generic() indicates that kasan is fully initialized, so it
should be put at end of kasan_init().

Otherwise bringing up the primary CPU failed when CONFIG_KASAN is set
on PTW-enabled systems, here are the call chains:

    kernel_entry()
      start_kernel()
        setup_arch()
          kasan_init()
            kasan_init_generic()

The reason is PTW-enabled systems have speculative accesses which means
memory accesses to the shadow memory after kasan_init() may be executed
by hardware before. However, accessing shadow memory is safe only after
kasan fully initialized because kasan_init() uses a temporary PGD table
until we have populated all levels of shadow page tables and writen the
PGD register. Moving kasan_init_generic() later can defer the occasion
of kasan_enabled(), so as to avoid speculative accesses on shadow pages.

After moving kasan_init_generic() to the end, kasan_init() can no longer
call kasan_mem_to_shadow() for shadow address conversion because it will
always return kasan_early_shadow_page. On the other hand, we should keep
the current logic of kasan_mem_to_shadow() for both the early and final
stage because there may be instrumentation before kasan_init().

To solve this, we factor out a new mem_to_shadow() function from current
kasan_mem_to_shadow() for the shadow address conversion in kasan_init().

Cc: stable@vger.kernel.org
Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2026-02-19 16:31:34 +01:00
..
boot LoongArch: dts: loongson-2k2000: Add default interrupt controller address cells 2026-01-23 11:21:32 +01:00
configs LoongArch changes for v6.18 2025-10-06 12:18:56 -07:00
crypto loongarch/crc32: expose CRC32 functions through lib 2024-12-01 17:23:01 -08:00
include LoongArch: Use __pmd()/__pte() for swap entry conversions 2026-01-08 10:17:06 +01:00
kernel LoongArch: Enable exception fixup for specific ADE subcode 2026-02-11 13:41:47 +01:00
kvm LoongArch: KVM: Fix kvm_device leak in kvm_pch_pic_destroy() 2026-01-23 11:21:32 +01:00
lib lib/crc: loongarch: Migrate optimized CRC code into lib/crc/ 2025-06-30 09:31:57 -07:00
mm LoongArch: Rework KASAN initialization for PTW-enabled systems 2026-02-19 16:31:34 +01:00
net LoongArch: BPF: Enhance the bpf_arch_text_poke() function 2026-01-08 10:17:21 +01:00
pci LoongArch: Add new PCI ID for pci_fixup_vgadev() 2026-01-08 10:17:05 +01:00
power LoongArch: Save and restore CSR.CNTC for hibernation 2025-05-14 22:17:52 +08:00
vdso LoongArch: vDSO: Remove -nostdlib complier flag 2025-08-05 19:00:22 +08:00
Kbuild LoongArch: Migrate to the generic rule for built-in DTB 2025-01-25 18:51:33 +08:00
Kconfig LoongArch changes for v6.18 2025-10-06 12:18:56 -07:00
Kconfig.debug LoongArch: Only allow OBJTOOL & ORC unwinder if toolchain supports -mthin-add-sub 2024-06-21 10:18:40 +08:00
Makefile rust: kbuild: support -Cjump-tables=n for Rust 1.93.0 2025-11-04 19:11:39 +01:00