Revert "memblock: exclude NOMAP regions from kmemleak"

Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2023396

This patch is a backport of the following upstream commit:
commit 6c9a54551977ddf2d6e22c21354b4fb88946f96e
Author: Mike Rapoport <rppt@kernel.org>
Date:   Thu Oct 21 10:09:28 2021 +0300

    Revert "memblock: exclude NOMAP regions from kmemleak"

    Commit 6e44bd6d34d6 ("memblock: exclude NOMAP regions from kmemleak")
    breaks boot on EFI systems with kmemleak and VM_DEBUG enabled:

      efi: Processing EFI memory map:
      efi:   0x000090000000-0x000091ffffff [Conventional|   |  |  |  |  |  |  |  |  |   |WB|WT|WC|UC]
      efi:   0x000092000000-0x0000928fffff [Runtime Data|RUN|  |  |  |  |  |  |  |  |   |WB|WT|WC|UC]
      ------------[ cut here ]------------
      kernel BUG at mm/kmemleak.c:1140!
      Internal error: Oops - BUG: 0 [#1] SMP
      Modules linked in:
      CPU: 0 PID: 0 Comm: swapper Not tainted 5.15.0-rc6-next-20211019+ #104
      pstate: 600000c5 (nZCv daIF -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
      pc : kmemleak_free_part_phys+0x64/0x8c
      lr : kmemleak_free_part_phys+0x38/0x8c
      sp : ffff800011eafbc0
      x29: ffff800011eafbc0 x28: 1fffff7fffb41c0d x27: fffffbfffda0e068
      x26: 0000000092000000 x25: 1ffff000023d5f94 x24: ffff800011ed84d0
      x23: ffff800011ed84c0 x22: ffff800011ed83d8 x21: 0000000000900000
      x20: ffff800011782000 x19: 0000000092000000 x18: ffff800011ee0730
      x17: 0000000000000000 x16: 0000000000000000 x15: 1ffff0000233252c
      x14: ffff800019a905a0 x13: 0000000000000001 x12: ffff7000023d5ed7
      x11: 1ffff000023d5ed6 x10: ffff7000023d5ed6 x9 : dfff800000000000
      x8 : ffff800011eaf6b7 x7 : 0000000000000001 x6 : ffff800011eaf6b0
      x5 : 00008ffffdc2a12a x4 : ffff7000023d5ed7 x3 : 1ffff000023dbf99
      x2 : 1ffff000022f0463 x1 : 0000000000000000 x0 : ffffffffffffffff
      Call trace:
       kmemleak_free_part_phys+0x64/0x8c
       memblock_mark_nomap+0x5c/0x78
       reserve_regions+0x294/0x33c
       efi_init+0x2d0/0x490
       setup_arch+0x80/0x138
       start_kernel+0xa0/0x3ec
       __primary_switched+0xc0/0xc8
      Code: 34000041 97d526e7 f9418e80 36000040 (d4210000)
      random: get_random_bytes called from print_oops_end_marker+0x34/0x80 with crng_init=0
      ---[ end trace 0000000000000000 ]---

    The crash happens because kmemleak_free_part_phys() tries to use __va()
    before memstart_addr is initialized and this triggers a VM_BUG_ON() in
    arch/arm64/include/asm/memory.h:

    Revert 6e44bd6d34d6 ("memblock: exclude NOMAP regions from kmemleak"),
    the issue it is fixing will be fixed differently.

    Reported-by: Qian Cai <quic_qiancai@quicinc.com>
    Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
    Acked-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Signed-off-by: Rafael Aquini <aquini@redhat.com>
This commit is contained in:
Rafael Aquini 2021-11-29 11:39:00 -05:00
parent 09dc5e97e5
commit ff0d6b7cfe
1 changed files with 1 additions and 6 deletions

View File

@ -936,12 +936,7 @@ int __init_memblock memblock_mark_mirror(phys_addr_t base, phys_addr_t size)
*/
int __init_memblock memblock_mark_nomap(phys_addr_t base, phys_addr_t size)
{
int ret = memblock_setclr_flag(base, size, 1, MEMBLOCK_NOMAP);
if (!ret)
kmemleak_free_part_phys(base, size);
return ret;
return memblock_setclr_flag(base, size, 1, MEMBLOCK_NOMAP);
}
/**