• Mike Rapoport's avatar
    memblock: exclude MEMBLOCK_NOMAP regions from kmemleak · 658aafc8
    Mike Rapoport authored
    Vladimir Zapolskiy reports:
    
    Commit a7259df7 ("memblock: make memblock_find_in_range method
    private") invokes a kernel panic while running kmemleak on OF platforms
    with nomaped regions:
    
      Unable to handle kernel paging request at virtual address fff000021e00000
      [...]
        scan_block+0x64/0x170
        scan_gray_list+0xe8/0x17c
        kmemleak_scan+0x270/0x514
        kmemleak_write+0x34c/0x4ac
    
    The memory allocated from memblock is registered with kmemleak, but if
    it is marked MEMBLOCK_NOMAP it won't have linear map entries so an
    attempt to scan such areas will fault.
    
    Ideally, memblock_mark_nomap() would inform kmemleak to ignore
    MEMBLOCK_NOMAP memory, but it can be called before kmemleak interfaces
    operating on physical addresses can use __va() conversion.
    
    Make sure that functions that mark allocated memory as MEMBLOCK_NOMAP
    take care of informing kmemleak to ignore such memory.
    
    Link: https://lore.kernel.org/all/8ade5174-b143-d621-8c8e-dc6a1898c6fb@lin...
    658aafc8
memblock.c 60.2 KB