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 <olivier.martin@arm.com>



git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16514 6f19259b-4bc3-4df7-8a09-765794883524
diff --git a/ArmPlatformPkg/Bds/BootMenu.c b/ArmPlatformPkg/Bds/BootMenu.c
index 91e00b7..3a72df0 100644
--- a/ArmPlatformPkg/Bds/BootMenu.c
+++ b/ArmPlatformPkg/Bds/BootMenu.c
@@ -341,6 +341,9 @@
       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 @@
           // 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 @@
   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",