From b1980169495dd905c84fd0f5757df9ea26f740bd Mon Sep 17 00:00:00 2001 From: Sean Keely Date: Mon, 15 Nov 2021 19:17:31 -0600 Subject: [PATCH] Fix leak in hsa_amd_interop_map_buffer. Agent temp array could have leaked if one of the given agent handles was invalid. Change-Id: I9e638b3a4f6bb917a4e3209ad81a1253bb603365 --- runtime/hsa-runtime/core/runtime/hsa_ext_amd.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/runtime/hsa-runtime/core/runtime/hsa_ext_amd.cpp b/runtime/hsa-runtime/core/runtime/hsa_ext_amd.cpp index 310145fc4c..5d7eac6cb2 100644 --- a/runtime/hsa-runtime/core/runtime/hsa_ext_amd.cpp +++ b/runtime/hsa-runtime/core/runtime/hsa_ext_amd.cpp @@ -807,9 +807,13 @@ hsa_status_t hsa_amd_interop_map_buffer(uint32_t num_agents, core::Agent** core_agents = short_agents; if (num_agents > tinyArraySize) { core_agents = new core::Agent* [num_agents]; - if (core_agents == NULL) return HSA_STATUS_ERROR_OUT_OF_RESOURCES; + if (core_agents == nullptr) return HSA_STATUS_ERROR_OUT_OF_RESOURCES; } + MAKE_SCOPE_GUARD([&]() { + if (num_agents > tinyArraySize) delete[] core_agents; + }); + for (uint32_t i = 0; i < num_agents; i++) { core::Agent* device = core::Agent::Convert(agents[i]); IS_VALID(device); @@ -820,7 +824,6 @@ hsa_status_t hsa_amd_interop_map_buffer(uint32_t num_agents, num_agents, core_agents, interop_handle, flags, size, ptr, metadata_size, metadata); - if (num_agents > tinyArraySize) delete[] core_agents; return ret; CATCH; }