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, &params);
 	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);