Re:Re: [PATCH] arm/kasan:fix the arry size of kasan_early_shadow_pte
From: hailong <hidden>
Date: 2021-01-10 10:53:34
At 2021-01-10 05:26:08, "Linus Walleij" [off-list ref] wrote:
On Sat, Jan 9, 2021 at 5:51 AM Hailong liu [off-list ref] wrote:quoted
From: Hailong Liu <redacted> The size of kasan_early_shadow_pte[] now is PTRS_PER_PTE which defined to 512 for arm architecture. This means that it only covers the prev Linux pte entries, but not the HWTABLE pte entries for arm. The reason it works well current is that the symbol kasan_early_shadow_page immediately following kasan_early_shadow_pte in memory is page aligned, which makes kasan_early_shadow_pte look like a 4KB size array. But we can't ensure the order always right with different compiler/linker, nor more bss symbols be introduced. We had a test with QEMU + vexpress:put a 512KB-size symbol with attribute __section(".bss..page_aligned") after kasan_early_shadow_pte, and poison it after kasan_early_init(). Then enabled CONFIG_KASAN, it failed to boot up. Signed-off-by: Hailong Liu <redacted> Signed-off-by: Ziliang Guo <redacted>OK I see the problem, I think.quoted
+#ifndef PTE_HWTABLE_PTRS +#define PTE_HWTABLE_PTRS 0 +#endifCan this even happen? We have either pgtable-2level.h or pgtable-3level.h, both of which define PTE_HWTABLE_PTRS.
I guess not for arm. But I'm not sure for other ARCHs.
quoted
extern unsigned char kasan_early_shadow_page[PAGE_SIZE]; -extern pte_t kasan_early_shadow_pte[PTRS_PER_PTE]; +extern pte_t kasan_early_shadow_pte[PTRS_PER_PTE + PTE_HWTABLE_PTRS];Yeah this looks exactly like bm_pte so it makes sense.
Yes, it comes from prototype of pm_pte. And it does solve the problems our project encountered and seems to work well for now.
If you drop the first ifndef, Reviewed-by: Linus Walleij <redacted> Yours, Linus Walleij
Thanks.