diff options
| author | Oleksandr Tymoshenko <ovt@google.com> | 2026-05-15 23:15:10 +0000 |
|---|---|---|
| committer | mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> | 2026-07-06 07:39:54 +0000 |
| commit | e6b64e84e5d4f8dcbb5e0ff52f322eb5892bff34 (patch) | |
| tree | 31e100d491ff949ec461f2064140b5ec75a50fe8 | |
| parent | a70c8729668f30de067f4b9db2e69baba283856e (diff) | |
| download | edk2-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.h | 4 | ||||
| -rw-r--r-- | DynamicTablesPkg/Library/Common/MetadataObjLib/MetadataObj.c | 22 |
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;
}
|
