powerpc/kasan: Fix shadow area set up for modules.
authorChristophe Leroy <christophe.leroy@c-s.fr>
Fri, 9 Aug 2019 14:58:10 +0000 (14:58 +0000)
committerMichael Ellerman <mpe@ellerman.id.au>
Tue, 20 Aug 2019 11:22:11 +0000 (21:22 +1000)
When loading modules, from time to time an Oops is encountered during
the init of shadow area for globals. This is due to the last page not
always being mapped depending on the exact distance between the start
and the end of the shadow area and the alignment with the page
addresses.

Fix this by aligning the starting address with the page address.

Fixes: 2edb16efc899 ("powerpc/32: Add KASAN support")
Cc: stable@vger.kernel.org # v5.2+
Reported-by: Erhard F. <erhard_f@mailbox.org>
Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/4f887e9b77d0d725cbb52035c7ece485c1c5fc14.1565361881.git.christophe.leroy@c-s.fr
arch/powerpc/mm/kasan/kasan_init_32.c

index 3282f8a2aeccde3e0807c9918d16f2669923fe1d..802387b231adcd5036a6d72a26bea5f81f730d4c 100644 (file)
@@ -87,7 +87,7 @@ static int __ref kasan_init_region(void *start, size_t size)
        if (!slab_is_available())
                block = memblock_alloc(k_end - k_start, PAGE_SIZE);
 
-       for (k_cur = k_start; k_cur < k_end; k_cur += PAGE_SIZE) {
+       for (k_cur = k_start & PAGE_MASK; k_cur < k_end; k_cur += PAGE_SIZE) {
                pmd_t *pmd = pmd_offset(pud_offset(pgd_offset_k(k_cur), k_cur), k_cur);
                void *va = block ? block + k_cur - k_start : kasan_get_one_page();
                pte_t pte = pfn_pte(PHYS_PFN(__pa(va)), PAGE_KERNEL);