]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootOption.c
MdeModulePkg/BootMaintUi: Add error handling codes when AllocatePool fail
[mirror_edk2.git] / MdeModulePkg / Library / BootMaintenanceManagerUiLib / BootOption.c
index a375d61dd3963bfeba0745d6132e530568a7a2a9..890728aff5b69cfc2867b12633ceeed25c1178eb 100644 (file)
@@ -5,7 +5,7 @@
 \r
   Boot option manipulation\r
 \r
-Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2004 - 2016, Intel Corporation. All rights reserved.<BR>\r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
 which accompanies this distribution.  The full text of the license may be found at\r
@@ -116,7 +116,6 @@ BOpt_DestroyMenuEntry (
   case BM_LOAD_CONTEXT_SELECT:\r
     LoadContext = (BM_LOAD_CONTEXT *) MenuEntry->VariableContext;\r
     FreePool (LoadContext->FilePathList);\r
-    FreePool (LoadContext->LoadOption);\r
     if (LoadContext->OptionalData != NULL) {\r
       FreePool (LoadContext->OptionalData);\r
     }\r
@@ -249,7 +248,6 @@ BOpt_GetBootOptions (
   UINTN                         Index;\r
   UINT16                        BootString[10];\r
   UINT8                         *LoadOptionFromVar;\r
-  UINT8                         *LoadOption;\r
   UINTN                         BootOptionSize;\r
   BOOLEAN                       BootNextFlag;\r
   UINT16                        *BootOrderList;\r
@@ -313,14 +311,6 @@ BOpt_GetBootOptions (
       continue;\r
     }\r
 \r
-    LoadOption = AllocateZeroPool (BootOptionSize);\r
-    if (LoadOption == NULL) {\r
-      continue;\r
-    }\r
-\r
-    CopyMem (LoadOption, LoadOptionFromVar, BootOptionSize);\r
-    FreePool (LoadOptionFromVar);\r
-\r
     if (BootNext != NULL) {\r
       BootNextFlag = (BOOLEAN) (*BootNext == BootOrderList[Index]);\r
     } else {\r
@@ -332,18 +322,17 @@ BOpt_GetBootOptions (
 \r
     NewLoadContext                      = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;\r
 \r
-    LoadOptionPtr                       = LoadOption;\r
-    LoadOptionEnd                       = LoadOption + BootOptionSize;\r
+    LoadOptionPtr                       = LoadOptionFromVar;\r
+    LoadOptionEnd                       = LoadOptionFromVar + BootOptionSize;\r
 \r
     NewMenuEntry->OptionNumber          = BootOrderList[Index];\r
-    NewLoadContext->LoadOptionModified  = FALSE;\r
     NewLoadContext->Deleted             = FALSE;\r
     NewLoadContext->IsBootNext          = BootNextFlag;\r
 \r
     //\r
     // Is a Legacy Device?\r
     //\r
-    Ptr = (UINT8 *) LoadOption;\r
+    Ptr = (UINT8 *) LoadOptionFromVar;\r
 \r
     //\r
     // Attribute = *(UINT32 *)Ptr;\r
@@ -374,13 +363,8 @@ BOpt_GetBootOptions (
     // for easy use with following LOAD_OPTION\r
     // embedded in this struct\r
     //\r
-    NewLoadContext->LoadOption      = LoadOption;\r
-    NewLoadContext->LoadOptionSize  = BootOptionSize;\r
 \r
     NewLoadContext->Attributes      = *(UINT32 *) LoadOptionPtr;\r
-    NewLoadContext->IsActive        = (BOOLEAN) (NewLoadContext->Attributes & LOAD_OPTION_ACTIVE);\r
-\r
-    NewLoadContext->ForceReconnect  = (BOOLEAN) (NewLoadContext->Attributes & LOAD_OPTION_FORCE_RECONNECT);\r
 \r
     LoadOptionPtr += sizeof (UINT32);\r
 \r
@@ -426,12 +410,11 @@ BOpt_GetBootOptions (
         LoadOptionPtr,\r
         OptionalDataSize\r
         );\r
-\r
-      NewLoadContext->OptionalDataSize = OptionalDataSize;\r
     }\r
 \r
     InsertTailList (&BootOptionMenu.Head, &NewMenuEntry->Link);\r
     MenuCount++;\r
+    FreePool (LoadOptionFromVar);\r
   }\r
   EfiBootManagerFreeLoadOptions (BootOption, BootOptionCount);\r
 \r
@@ -441,6 +424,7 @@ BOpt_GetBootOptions (
   if (BootOrderList != NULL) {\r
     FreePool (BootOrderList);\r
   }\r
+\r
   BootOptionMenu.MenuNumber = MenuCount;\r
   return EFI_SUCCESS;\r
 }\r
@@ -650,7 +634,6 @@ BOpt_GetDriverOptions (
   UINTN           Index;\r
   UINT16          DriverString[12];\r
   UINT8           *LoadOptionFromVar;\r
-  UINT8           *LoadOption;\r
   UINTN           DriverOptionSize;\r
 \r
   UINT16          *DriverOrderList;\r
@@ -691,13 +674,6 @@ BOpt_GetDriverOptions (
       continue;\r
     }\r
 \r
-    LoadOption = AllocateZeroPool (DriverOptionSize);\r
-    if (LoadOption == NULL) {\r
-      continue;\r
-    }\r
-\r
-    CopyMem (LoadOption, LoadOptionFromVar, DriverOptionSize);\r
-    FreePool (LoadOptionFromVar);\r
 \r
     NewMenuEntry = BOpt_CreateMenuEntry (BM_LOAD_CONTEXT_SELECT);\r
     if (NULL == NewMenuEntry) {\r
@@ -705,10 +681,9 @@ BOpt_GetDriverOptions (
     }\r
 \r
     NewLoadContext                      = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;\r
-    LoadOptionPtr                       = LoadOption;\r
-    LoadOptionEnd                       = LoadOption + DriverOptionSize;\r
+    LoadOptionPtr                       = LoadOptionFromVar;\r
+    LoadOptionEnd                       = LoadOptionFromVar + DriverOptionSize;\r
     NewMenuEntry->OptionNumber          = DriverOrderList[Index];\r
-    NewLoadContext->LoadOptionModified  = FALSE;\r
     NewLoadContext->Deleted             = FALSE;\r
     NewLoadContext->IsLegacy            = FALSE;\r
 \r
@@ -717,13 +692,8 @@ BOpt_GetDriverOptions (
     // for easy use with following LOAD_OPTION\r
     // embedded in this struct\r
     //\r
-    NewLoadContext->LoadOption      = LoadOption;\r
-    NewLoadContext->LoadOptionSize  = DriverOptionSize;\r
 \r
     NewLoadContext->Attributes      = *(UINT32 *) LoadOptionPtr;\r
-    NewLoadContext->IsActive        = (BOOLEAN) (NewLoadContext->Attributes & LOAD_OPTION_ACTIVE);\r
-\r
-    NewLoadContext->ForceReconnect  = (BOOLEAN) (NewLoadContext->Attributes & LOAD_OPTION_FORCE_RECONNECT);\r
 \r
     LoadOptionPtr += sizeof (UINT32);\r
 \r
@@ -771,16 +741,17 @@ BOpt_GetDriverOptions (
         OptionalDataSize\r
         );\r
 \r
-      NewLoadContext->OptionalDataSize = OptionalDataSize;\r
     }\r
 \r
     InsertTailList (&DriverOptionMenu.Head, &NewMenuEntry->Link);\r
+    FreePool (LoadOptionFromVar);\r
 \r
   }\r
 \r
   if (DriverOrderList != NULL) {\r
     FreePool (DriverOrderList);\r
   }\r
+\r
   DriverOptionMenu.MenuNumber = Index;\r
   return EFI_SUCCESS;\r
 \r
@@ -886,6 +857,7 @@ GetDriverOrder (
   @retval FALSE  Not exit caller function.\r
 **/\r
 BOOLEAN \r
+EFIAPI\r
 BootFromFile (\r
   IN EFI_DEVICE_PATH_PROTOCOL    *FilePath\r
   )\r
@@ -893,29 +865,33 @@ BootFromFile (
   EFI_BOOT_MANAGER_LOAD_OPTION BootOption;\r
   CHAR16                       *FileName;\r
 \r
+  FileName = NULL;\r
+\r
   FileName = ExtractFileNameFromDevicePath(FilePath);\r
-  EfiBootManagerInitializeLoadOption (\r
-    &BootOption,\r
-    0,\r
-    LoadOptionTypeBoot,\r
-    LOAD_OPTION_ACTIVE,\r
-    FileName,\r
-    FilePath,\r
-    NULL,\r
-    0\r
-    );\r
-  //\r
-  // Since current no boot from removable media directly is allowed */\r
-  //\r
-  gST->ConOut->ClearScreen (gST->ConOut);\r
+  if (FileName != NULL) {\r
+    EfiBootManagerInitializeLoadOption (\r
+      &BootOption,\r
+      0,\r
+      LoadOptionTypeBoot,\r
+      LOAD_OPTION_ACTIVE,\r
+      FileName,\r
+      FilePath,\r
+      NULL,\r
+      0\r
+      );\r
+    //\r
+    // Since current no boot from removable media directly is allowed */\r
+    //\r
+    gST->ConOut->ClearScreen (gST->ConOut);\r
 \r
-  BmmBdsSetConsoleMode (FALSE);\r
-  EfiBootManagerBoot (&BootOption);\r
-  BmmBdsSetConsoleMode (TRUE);\r
+    BmmSetConsoleMode (FALSE);\r
+    EfiBootManagerBoot (&BootOption);\r
+    BmmSetConsoleMode (TRUE);\r
 \r
-  FreePool(FileName);\r
+    FreePool(FileName);\r
 \r
-  EfiBootManagerFreeLoadOption (&BootOption);\r
+    EfiBootManagerFreeLoadOption (&BootOption);\r
+  }\r
 \r
   return FALSE;\r
 }\r
@@ -958,6 +934,7 @@ ReSendForm(
   @retval FALSE  Not exit caller function.\r
 **/\r
 BOOLEAN \r
+EFIAPI\r
 CreateBootOptionFromFile (\r
   IN EFI_DEVICE_PATH_PROTOCOL    *FilePath\r
   )\r
@@ -975,6 +952,7 @@ CreateBootOptionFromFile (
 \r
 **/\r
 BOOLEAN \r
+EFIAPI\r
 CreateDriverOptionFromFile (\r
   IN EFI_DEVICE_PATH_PROTOCOL    *FilePath\r
   )\r