summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOleksandr Tymoshenko <ovt@google.com>2026-05-15 23:15:10 +0000
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>2026-07-06 07:39:54 +0000
commite6b64e84e5d4f8dcbb5e0ff52f322eb5892bff34 (patch)
tree31e100d491ff949ec461f2064140b5ec75a50fe8
parenta70c8729668f30de067f4b9db2e69baba283856e (diff)
downloadedk2-e6b64e84e5d4f8dcbb5e0ff52f322eb5892bff34.tar.gz
edk2-e6b64e84e5d4f8dcbb5e0ff52f322eb5892bff34.zip
DynamicTablesPkg: Fix memory leak in MetaDataObjLib library
Clean up all metadata entries when freeing a metadata handle in MetadataFreeHandle. Signed-off-by: Oleksandr Tymoshenko <ovt@google.com>
-rw-r--r--DynamicTablesPkg/Include/Library/MetadataObjLib.h4
-rw-r--r--DynamicTablesPkg/Library/Common/MetadataObjLib/MetadataObj.c22
2 files changed, 22 insertions, 4 deletions
diff --git a/DynamicTablesPkg/Include/Library/MetadataObjLib.h b/DynamicTablesPkg/Include/Library/MetadataObjLib.h
index 72fcc1e6b0..078a57ce0f 100644
--- a/DynamicTablesPkg/Include/Library/MetadataObjLib.h
+++ b/DynamicTablesPkg/Include/Library/MetadataObjLib.h
@@ -77,7 +77,7 @@ MetadataInitializeHandle (
/** Free the Metadata Root.
- @param[in] Root Root of the Metadata information to free.
+ @param[in] RootHandle Root of the Metadata information to free.
@retval EFI_SUCCESS Success.
@retval EFI_INVALID_PARAMETER Invalid parameter.
@@ -86,7 +86,7 @@ MetadataInitializeHandle (
EFI_STATUS
EFIAPI
MetadataFreeHandle (
- IN METADATA_ROOT_HANDLE Root
+ IN METADATA_ROOT_HANDLE RootHandle
);
/** Attach some Metadata to a (Type/Token) pair.
diff --git a/DynamicTablesPkg/Library/Common/MetadataObjLib/MetadataObj.c b/DynamicTablesPkg/Library/Common/MetadataObjLib/MetadataObj.c
index 20b0609946..2e7f28420d 100644
--- a/DynamicTablesPkg/Library/Common/MetadataObjLib/MetadataObj.c
+++ b/DynamicTablesPkg/Library/Common/MetadataObjLib/MetadataObj.c
@@ -63,7 +63,7 @@ MetadataInitializeHandle (
/** Free the Metadata Root.
- @param[in] Root Root of the Metadata information to free.
+ @param[in] RootHandle Root of the Metadata information to free.
@retval EFI_SUCCESS Success.
@retval EFI_INVALID_PARAMETER Invalid parameter.
@@ -72,14 +72,32 @@ MetadataInitializeHandle (
EFI_STATUS
EFIAPI
MetadataFreeHandle (
- IN METADATA_ROOT_HANDLE Root
+ IN METADATA_ROOT_HANDLE RootHandle
)
{
+ METADATA_ROOT *Root;
+ METADATA_ENTRY *Entry;
+ UINT32 Index;
+
+ Root = (METADATA_ROOT *)RootHandle;
+
if (Root == NULL) {
ASSERT (Root != NULL);
return EFI_INVALID_PARAMETER;
}
+ for (Index = 0; Index < MetadataTypeMax; Index++) {
+ while (!IsListEmpty (&Root->MetadataList[Index].List)) {
+ Entry = (METADATA_ENTRY *)GetFirstNode (&Root->MetadataList[Index].List);
+ RemoveEntryList (&Entry->List);
+ if (Entry->Metadata != NULL) {
+ FreePool (Entry->Metadata);
+ }
+
+ FreePool (Entry);
+ }
+ }
+
FreePool (Root);
return EFI_SUCCESS;
}