Reviewed-by: Qiu Shumin <[email protected]> -----Original Message----- From: edk2-devel [mailto:[email protected]] On Behalf Of Dandan Bi Sent: Wednesday, May 04, 2016 4:05 PM To: [email protected] Cc: Qiu, Shumin; Dong, Eric Subject: [edk2] [patch] MdeModulePkg/HiiDatabaseDxe: Fix memory leak issues in HiiDatabaseDxe
Cc: Qiu Shumin <[email protected]> Cc: Eric Dong <[email protected]> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Dandan Bi <[email protected]> Reviewed-by: Eric Dong <[email protected]> --- .../Universal/HiiDatabaseDxe/ConfigRouting.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigRouting.c b/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigRouting.c index cc155cc..a704734 100644 --- a/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigRouting.c +++ b/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigRouting.c @@ -547,10 +547,12 @@ FindSameBlockElement( return Status; } ASSERT (TempBuffer != NULL); if ((BufferLen == Length) && (0 == CompareMem (Buffer, TempBuffer, Length))) { *Found = TRUE; + FreePool (TempBuffer); + TempBuffer = NULL; return EFI_SUCCESS; } else { FreePool (TempBuffer); TempBuffer = NULL; BlockPtr = StrStr (BlockPtr + 1, BlockName); @@ -1885,10 +1887,13 @@ IsThisPackageList ( AsciiStrToUnicodeStr ((CHAR8 *)IfrVarStore->Name, VarStoreName); if (IsThisVarstore((VOID *)&IfrVarStore->Guid, VarStoreName, ConfigHdr)) { FindVarstore = TRUE; goto Done; + } else { + FreePool (VarStoreName); + VarStoreName = NULL; } break; case EFI_IFR_VARSTORE_EFI_OP: IfrEfiVarStore = (EFI_IFR_VARSTORE_EFI *) IfrOpHdr; @@ -1899,10 +1904,13 @@ IsThisPackageList ( AsciiStrToUnicodeStr ((CHAR8 *)IfrEfiVarStore->Name, VarStoreName); if (IsThisVarstore (&IfrEfiVarStore->Guid, VarStoreName, ConfigHdr)) { FindVarstore = TRUE; goto Done; + } else { + FreePool (VarStoreName); + VarStoreName = NULL; } break; case EFI_IFR_VARSTORE_NAME_VALUE_OP: IfrNameValueVarStore = (EFI_IFR_VARSTORE_NAME_VALUE *) IfrOpHdr; @@ -2092,10 +2100,11 @@ ParseIfrData ( BlockData = NULL; DefaultDataPtr = NULL; FirstOneOfOption = FALSE; VarStoreId = 0; FirstOrderedList = FALSE; + VarStoreName = NULL; ZeroMem (&DefaultData, sizeof (IFR_DEFAULT_DATA)); // // Go through the form package to parse OpCode one by one. // @@ -2149,10 +2158,13 @@ ParseIfrData ( CopyGuid (&VarStorageData->Guid, (EFI_GUID *) (VOID *) &IfrVarStore->Guid); VarStorageData->Size = IfrVarStore->Size; VarStorageData->Name = VarStoreName; VarStorageData->Type = EFI_HII_VARSTORE_BUFFER; VarStoreId = IfrVarStore->VarStoreId; + } else { + FreePool (VarStoreName); + VarStoreName = NULL; } break; case EFI_IFR_VARSTORE_EFI_OP: // @@ -2187,10 +2199,13 @@ ParseIfrData ( CopyGuid (&VarStorageData->Guid, (EFI_GUID *) (VOID *) &IfrEfiVarStore->Guid); VarStorageData->Size = IfrEfiVarStore->Size; VarStorageData->Name = VarStoreName; VarStorageData->Type = EFI_HII_VARSTORE_EFI_VARIABLE_BUFFER; VarStoreId = IfrEfiVarStore->VarStoreId; + } else { + FreePool (VarStoreName); + VarStoreName = NULL; } break; case EFI_IFR_VARSTORE_NAME_VALUE_OP: // @@ -3012,11 +3027,11 @@ GetBlockElement ( // Status = GetValueOfNumber (StringPtr, &TmpBuffer, &Length); if (EFI_ERROR (Status)) { goto Done; } - + FreePool (TmpBuffer); StringPtr += Length; if (*StringPtr != 0 && *StringPtr != L'&') { goto Done; } } @@ -3866,10 +3881,14 @@ Done: RemoveEntryList (&DefaultValueData->Entry); FreePool (DefaultValueData); } FreePool (BlockData); } + if (VarStorageData ->Name != NULL) { + FreePool (VarStorageData ->Name); + VarStorageData ->Name = NULL; + } FreePool (VarStorageData); } if (DefaultIdArray != NULL) { // -- 1.9.5.msysgit.1 _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

