From 830e5b8c0f8dda3c46313200e1464548b2b7d2a3 Mon Sep 17 00:00:00 2001 From: Olivier Martin Date: Fri, 12 Dec 2014 19:11:56 +0000 Subject: [PATCH] ArmPlatformPkg/Bds: Fixed memory leak Device Paths were not freed after calling BDS_LOAD_OPTION_SUPPORT.CreateDevicePathNode() Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Olivier Martin git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16514 6f19259b-4bc3-4df7-8a09-765794883524 --- ArmPlatformPkg/Bds/BootMenu.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/ArmPlatformPkg/Bds/BootMenu.c b/ArmPlatformPkg/Bds/BootMenu.c index 91e00b759e..3a72df0495 100644 --- a/ArmPlatformPkg/Bds/BootMenu.c +++ b/ArmPlatformPkg/Bds/BootMenu.c @@ -341,6 +341,9 @@ BootMenuAddBootOption ( if (InitrdPathNodes != NULL) { // Append the Device Path to the selected device path InitrdPath = AppendDevicePath (SupportedBootDevice->DevicePathProtocol, (CONST EFI_DEVICE_PATH_PROTOCOL *)InitrdPathNodes); + // Free the InitrdPathNodes created by Support->CreateDevicePathNode() + FreePool (InitrdPathNodes); + if (InitrdPath == NULL) { Status = EFI_OUT_OF_RESOURCES; goto EXIT; @@ -540,6 +543,8 @@ BootMenuUpdateBootOption ( // Append the Device Path to the selected device path InitrdPath = AppendDevicePath (TempInitrdPath, (CONST EFI_DEVICE_PATH_PROTOCOL *)InitrdPathNodes); FreePool (TempInitrdPath); + // Free the InitrdPathNodes created by Support->CreateDevicePathNode() + FreePool (InitrdPathNodes); if (InitrdPath == NULL) { Status = EFI_OUT_OF_RESOURCES; goto EXIT; @@ -846,6 +851,8 @@ UpdateFdtPath ( if (FdtDevicePathNodes != NULL) { // Append the Device Path node to the select device path FdtDevicePath = AppendDevicePath (SupportedBootDevice->DevicePathProtocol, FdtDevicePathNodes); + // Free the FdtDevicePathNodes created by Support->CreateDevicePathNode() + FreePool (FdtDevicePathNodes); FdtDevicePathSize = GetDevicePathSize (FdtDevicePath); Status = gRT->SetVariable ( (CHAR16*)L"Fdt",