]> git.baikalelectronics.ru Git - kernel.git/commit
memblock: exclude MEMBLOCK_NOMAP regions from kmemleak
authorMike Rapoport <rppt@linux.ibm.com>
Thu, 21 Oct 2021 07:09:29 +0000 (10:09 +0300)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 22 Oct 2021 04:30:49 +0000 (18:30 -1000)
commite939e6b5e103f27e1e8c1abb1ddcdf8404b62744
tree4ef1a0cb67618f453b0cf065fe785f3e5c0fed1a
parent40e7e883d992e62b7fc4493891e8a4f793c43a3b
memblock: exclude MEMBLOCK_NOMAP regions from kmemleak

Vladimir Zapolskiy reports:

Commit 67a62a470b3c ("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@linaro.org
Link: https://lore.kernel.org/all/c30ff0a2-d196-c50d-22f0-bd50696b1205@quicinc.com
Fixes: 67a62a470b3c ("memblock: make memblock_find_in_range method private")
Reported-by: Vladimir Zapolskiy <vladimir.zapolskiy@linaro.org>
Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
Tested-by: Vladimir Zapolskiy <vladimir.zapolskiy@linaro.org>
Tested-by: Qian Cai <quic_qiancai@quicinc.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
drivers/acpi/tables.c
drivers/of/of_reserved_mem.c
mm/memblock.c