ANDROID: mm/memory_hotplug: Fix error path handling
Correct a resource leak if arch_add_memory() returns failure.
Bug: 243477359
Change-Id: I1dce82a18c2242d7b6fd9fb1fe3a8b2ba67853de
Fixes: 417ac617ea5e ("ANDROID: mm/memory_hotplug: implement {add/remove}_memory_subsection")
Signed-off-by: Patrick Daly <quic_pdaly@quicinc.com>
Signed-off-by: Chris Goldsworthy <quic_cgoldswo@quicinc.com>
diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
index 6702c11..9176bae 100644
--- a/mm/memory_hotplug.c
+++ b/mm/memory_hotplug.c
@@ -1156,14 +1156,22 @@ int add_memory_subsection(int nid, u64 start, u64 size)
ret = arch_add_memory(nid, start, size, ¶ms);
if (ret) {
- if (IS_ENABLED(CONFIG_ARCH_KEEP_MEMBLOCK))
- memblock_remove(start, size);
pr_err("%s failed to add subsection start 0x%llx size 0x%llx\n",
__func__, start, size);
+ goto err_add_memory;
}
mem_hotplug_done();
return ret;
+
+err_add_memory:
+ if (IS_ENABLED(CONFIG_ARCH_KEEP_MEMBLOCK))
+ memblock_remove(start, size);
+
+ mem_hotplug_done();
+
+ release_memory_resource(res);
+ return ret;
}
EXPORT_SYMBOL_GPL(add_memory_subsection);