In recently introduced memblock_discard() there is a reversed logic bug.
Memory is freed of static array instead of dynamically allocated one.

Fixes: 3010f876500f ("mm: discard memblock data later")

Reported-and-tested-by: Woody Suwalski <[email protected]>
Signed-off-by: Pavel Tatashin <[email protected]>
---
 mm/memblock.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/mm/memblock.c b/mm/memblock.c
index bf14aea6ab70..91205780e6b1 100644
--- a/mm/memblock.c
+++ b/mm/memblock.c
@@ -299,7 +299,7 @@ void __init memblock_discard(void)
                __memblock_free_late(addr, size);
        }
 
-       if (memblock.memory.regions == memblock_memory_init_regions) {
+       if (memblock.memory.regions != memblock_memory_init_regions) {
                addr = __pa(memblock.memory.regions);
                size = PAGE_ALIGN(sizeof(struct memblock_region) *
                                  memblock.memory.max);
-- 
2.14.1

Reply via email to