powerpc/kasan: Fix shadow pages allocation failure
Doing kasan pages allocation in MMU_init is too early, kernel doesn't have access yet to the entire memory space and memblock_alloc() fails when the kernel is a bit big. Do it from kasan_init() instead. Fixes:2edb16efc8
("powerpc/32: Add KASAN support") Fixes:d2a91cef9b
("powerpc/kasan: Fix shadow pages allocation failure") Cc: stable@vger.kernel.org Reported-by: Erhard F. <erhard_f@mailbox.org> Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://bugzilla.kernel.org/show_bug.cgi?id=208181 Link: https://lore.kernel.org/r/63048fcea8a1c02f75429ba3152f80f7853f87fc.1593690707.git.christophe.leroy@csgroup.eu
This commit is contained in:
parent
b506923ee4
commit
41ea93cf7b
|
@ -120,11 +120,24 @@ static void __init kasan_unmap_early_shadow_vmalloc(void)
|
||||||
void __init kasan_mmu_init(void)
|
void __init kasan_mmu_init(void)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
if (early_mmu_has_feature(MMU_FTR_HPTE_TABLE) ||
|
||||||
|
IS_ENABLED(CONFIG_KASAN_VMALLOC)) {
|
||||||
|
ret = kasan_init_shadow_page_tables(KASAN_SHADOW_START, KASAN_SHADOW_END);
|
||||||
|
|
||||||
|
if (ret)
|
||||||
|
panic("kasan: kasan_init_shadow_page_tables() failed");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void __init kasan_init(void)
|
||||||
|
{
|
||||||
struct memblock_region *reg;
|
struct memblock_region *reg;
|
||||||
|
|
||||||
for_each_memblock(memory, reg) {
|
for_each_memblock(memory, reg) {
|
||||||
phys_addr_t base = reg->base;
|
phys_addr_t base = reg->base;
|
||||||
phys_addr_t top = min(base + reg->size, total_lowmem);
|
phys_addr_t top = min(base + reg->size, total_lowmem);
|
||||||
|
int ret;
|
||||||
|
|
||||||
if (base >= top)
|
if (base >= top)
|
||||||
continue;
|
continue;
|
||||||
|
@ -134,18 +147,6 @@ void __init kasan_mmu_init(void)
|
||||||
panic("kasan: kasan_init_region() failed");
|
panic("kasan: kasan_init_region() failed");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (early_mmu_has_feature(MMU_FTR_HPTE_TABLE) ||
|
|
||||||
IS_ENABLED(CONFIG_KASAN_VMALLOC)) {
|
|
||||||
ret = kasan_init_shadow_page_tables(KASAN_SHADOW_START, KASAN_SHADOW_END);
|
|
||||||
|
|
||||||
if (ret)
|
|
||||||
panic("kasan: kasan_init_shadow_page_tables() failed");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void __init kasan_init(void)
|
|
||||||
{
|
|
||||||
kasan_remap_early_shadow_ro();
|
kasan_remap_early_shadow_ro();
|
||||||
|
|
||||||
clear_page(kasan_early_shadow_page);
|
clear_page(kasan_early_shadow_page);
|
||||||
|
|
Loading…
Reference in New Issue