linux-next/arch/loongarch
Huacai Chen 1a629fe4cc LoongArch: Make virt_addr_valid()/__virt_addr_valid() work with KFENCE
When enabling both CONFIG_KFENCE and CONFIG_DEBUG_SG, I get the
following backtraces when running LongArch kernels.

[    2.496257] kernel BUG at include/linux/scatterlist.h:187!
...
[    2.501925] Call Trace:
[    2.501950] [<9000000004ad59c4>] sg_init_one+0xac/0xc0
[    2.502204] [<9000000004a438f8>] do_test_kpp+0x278/0x6e4
[    2.502353] [<9000000004a43dd4>] alg_test_kpp+0x70/0xf4
[    2.502494] [<9000000004a41b48>] alg_test+0x128/0x690
[    2.502631] [<9000000004a3d898>] cryptomgr_test+0x20/0x40
[    2.502775] [<90000000041b4508>] kthread+0x138/0x158
[    2.502912] [<9000000004161c48>] ret_from_kernel_thread+0xc/0xa4

The backtrace is always similar but not exactly the same. It is always
triggered from cryptomgr_test, but not always from the same test.

Analysis shows that with CONFIG_KFENCE active, the address returned from
kmalloc() and friends is not always below vm_map_base. It is allocated
by kfence_alloc() which at least sometimes seems to get its memory from
an address space above vm_map_base. This causes __virt_addr_valid() to
return false for the affected objects.

Let __virt_addr_valid() return 1 for kfence pool addresses, this make
virt_addr_valid()/__virt_addr_valid() work with KFENCE.

Reported-by: Guenter Roeck <linux@roeck-us.net>
Suggested-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
2024-04-10 21:08:51 +08:00
..
boot LoongArch: dts: Minor whitespace cleanup 2024-02-23 14:36:31 +08:00
configs LoongArch changes for v6.8 2024-01-19 13:30:49 -08:00
crypto LoongArch/crypto: Clean up useless assignment operations 2024-03-19 15:50:34 +08:00
include LoongArch: Make {virt, phys, page, pfn} translation work with KFENCE 2024-04-10 21:08:51 +08:00
kernel LoongArch changes for v6.9 2024-03-22 10:22:45 -07:00
kvm LoongArch changes for v6.9 2024-03-22 10:22:45 -07:00
lib LoongArch: Add ORC stack unwinder support 2024-03-11 22:23:47 +08:00
mm LoongArch: Make virt_addr_valid()/__virt_addr_valid() work with KFENCE 2024-04-10 21:08:51 +08:00
net LoongArch: BPF: Prevent out-of-bounds memory access 2024-01-17 12:43:13 +08:00
pci LoongArch: Add FDT booting support from efi system table 2022-12-14 08:41:53 +08:00
power LoongArch: Export some arch-specific pm interfaces 2023-06-29 20:58:44 +08:00
vdso LoongArch: Add ORC stack unwinder support 2024-03-11 22:23:47 +08:00
Kbuild LoongArch: Allow device trees be built into the kernel 2024-01-17 12:43:00 +08:00
Kconfig LoongArch changes for v6.9 2024-03-22 10:22:45 -07:00
Kconfig.debug LoongArch: Add ORC stack unwinder support 2024-03-11 22:23:47 +08:00
Makefile LoongArch changes for v6.9 2024-03-22 10:22:45 -07:00