[PATCH v2 5/5] of: reserved_mem: retain static no-map memory on init failure

From: Wandun Chen

Date: Tue Aug 18 2026 - 05:25:55 EST


From: Wandun Chen <chenwandun@xxxxxxxxxxx>

Static no-map reserved-memory regions are initialized after paging_init().
If initialization fails, MEMBLOCK_NOMAP would be cleared, and the memory
is available to the buddy allocator even though it was excluded from the
kernel linear mapping.

Clear MEMBLOCK_NOMAP only for dynamically allocated regions, which are
initialized before paging_init() and can safely be made available to the
kernel linear mapping.

Sashiko found this issue in [1].

Fixes: 8a6e02d0c00e ("of: reserved_mem: Restructure how the reserved memory regions are processed")
Signed-off-by: Wandun Chen <chenwandun@xxxxxxxxxxx>
Link: https://sashiko.dev/#/message/20260814090305.4C8741F00A3D%40smtp.kernel.org [1]
---
drivers/of/of_reserved_mem.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/of/of_reserved_mem.c b/drivers/of/of_reserved_mem.c
index ac5db19dcc93..0090fa86dd10 100644
--- a/drivers/of/of_reserved_mem.c
+++ b/drivers/of/of_reserved_mem.c
@@ -709,7 +709,7 @@ static void __init fdt_init_reserved_mem_node(unsigned long node, const char *un
pr_info("node %s compatible matching fail\n", rmem->name);
rmem->name = NULL;

- if (nomap)
+ if (dynamic && nomap)
memblock_clear_nomap(rmem->base, rmem->size);

if (dynamic || !nomap)
--
2.43.0