summaryrefslogtreecommitdiff
path: root/0188-sandbox-fix-memory-leak-in-fill-sandbox-metadate.patch
diff options
context:
space:
mode:
Diffstat (limited to '0188-sandbox-fix-memory-leak-in-fill-sandbox-metadate.patch')
-rw-r--r--0188-sandbox-fix-memory-leak-in-fill-sandbox-metadate.patch71
1 files changed, 71 insertions, 0 deletions
diff --git a/0188-sandbox-fix-memory-leak-in-fill-sandbox-metadate.patch b/0188-sandbox-fix-memory-leak-in-fill-sandbox-metadate.patch
new file mode 100644
index 0000000..c1ca215
--- /dev/null
+++ b/0188-sandbox-fix-memory-leak-in-fill-sandbox-metadate.patch
@@ -0,0 +1,71 @@
+From 012553d4c53bd8d1c73d22c18fd24bf441041d54 Mon Sep 17 00:00:00 2001
+From: zhongtao <zhongtao17@huawei.com>
+Date: Sat, 8 Feb 2025 11:34:59 +0800
+Subject: [PATCH 188/198] [sandbox] fix memory leak in fill sandbox metadate
+
+Signed-off-by: zhongtao <zhongtao17@huawei.com>
+---
+ src/daemon/sandbox/sandbox.cc | 26 +++++++++++++++++++++-----
+ 1 file changed, 21 insertions(+), 5 deletions(-)
+
+diff --git a/src/daemon/sandbox/sandbox.cc b/src/daemon/sandbox/sandbox.cc
+index 12693445..e2f42237 100644
+--- a/src/daemon/sandbox/sandbox.cc
++++ b/src/daemon/sandbox/sandbox.cc
+@@ -890,20 +890,24 @@ auto Sandbox::GenerateSandboxMetadataJson(sandbox_metadata *metadata) -> std::st
+
+ auto Sandbox::SaveMetadata(Errors &error) -> bool
+ {
+- sandbox_metadata_runtime_info info = { 0 };
+- sandbox_metadata metadata = { 0 };
+ int nret = -1;
+ const std::string path = GetMetadataJsonPath();
+ std::string metadataJson;
+
+- metadata.runtime_info = &info;
++ sandbox_metadata *metadata = static_cast<sandbox_metadata *>(util_common_calloc_s(sizeof(sandbox_metadata)));
++ if (metadata == nullptr) {
++ error.SetError("Out of memory");
++ return false;
++ }
++
++ auto metadataWarpper = std::unique_ptr<CStructWrapper<sandbox_metadata>>(new CStructWrapper<sandbox_metadata>(metadata, free_sandbox_metadata));
+
+- FillSandboxMetadata(&metadata, error);
++ FillSandboxMetadata(metadata, error);
+ if (!error.Empty()) {
+ return false;
+ }
+
+- metadataJson = GenerateSandboxMetadataJson(&metadata);
++ metadataJson = GenerateSandboxMetadataJson(metadata);
+ if (metadataJson.length() == 0) {
+ error.Errorf("Failed to get sandbox metadata json for sandbox: '%s'", m_id.c_str());
+ return false;
+@@ -1102,11 +1106,23 @@ auto Sandbox::GetNetworkSettingsPath() -> std::string
+ void Sandbox::FillSandboxMetadata(sandbox_metadata* metadata, Errors &error)
+ {
+ std::string jsonStr;
++ sandbox_metadata_runtime_info *info = nullptr;
++
+ metadata->id = util_strdup_s(m_id.c_str());
+ metadata->name = util_strdup_s(m_name.c_str());
++
++ info = static_cast<sandbox_metadata_runtime_info *>(util_common_calloc_s(sizeof(sandbox_metadata_runtime_info)));
++ if (info == NULL) {
++ error.SetError("Out of memory");
++ ERROR("Out of memory");
++ return;
++ }
++
++ metadata->runtime_info = info;
+ metadata->runtime_info->runtime = util_strdup_s(m_runtimeInfo.runtime.c_str());
+ metadata->runtime_info->sandboxer = util_strdup_s(m_runtimeInfo.sandboxer.c_str());
+ metadata->runtime_info->runtime_handler = util_strdup_s(m_runtimeInfo.runtimeHandler.c_str());
++
+ metadata->net_mode = util_strdup_s(m_netMode.c_str());
+ metadata->network_ready = m_networkReady;
+ metadata->task_address = util_strdup_s(m_taskAddress.c_str());
+--
+2.34.1
+