Re: [PATCH] arm/kasan:fix the arry size of kasan_early_shadow_pte
flat view
From: Linus Walleij <hidden>
Date: 2021-01-09 21:27:09
Also in:
linux-arm-kernel, lkml
On Sat, Jan 9, 2021 at 5:51 AM Hailong liu [off-list ref] wrote:
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 hunk ↗ jump to hunk
+#ifndef PTE_HWTABLE_PTRS +#define PTE_HWTABLE_PTRS 0 +#endif
Can this even happen? We have either pgtable-2level.h or pgtable-3level.h, both of which define PTE_HWTABLE_PTRS.
quoted hunk ↗ jump to hunk
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. If you drop the first ifndef, Reviewed-by: Linus Walleij <redacted> Yours, Linus Walleij