]> 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 5665d040889ba406d293577fd96573b55087c7d5..890728aff5b69cfc2867b12633ceeed25c1178eb 100644 (file)
@@ -248,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
@@ -312,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
@@ -331,8 +322,8 @@ 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->Deleted             = FALSE;\r
@@ -341,7 +332,7 @@ BOpt_GetBootOptions (
     //\r
     // Is a Legacy Device?\r
     //\r
-    Ptr = (UINT8 *) LoadOption;\r
+    Ptr = (UINT8 *) LoadOptionFromVar;\r
 \r
     //\r
     // Attribute = *(UINT32 *)Ptr;\r
@@ -423,6 +414,7 @@ BOpt_GetBootOptions (
 \r
     InsertTailList (&BootOptionMenu.Head, &NewMenuEntry->Link);\r
     MenuCount++;\r
+    FreePool (LoadOptionFromVar);\r
   }\r
   EfiBootManagerFreeLoadOptions (BootOption, BootOptionCount);\r
 \r
@@ -433,7 +425,6 @@ BOpt_GetBootOptions (
     FreePool (BootOrderList);\r
   }\r
 \r
-  FreePool(LoadOption);\r
   BootOptionMenu.MenuNumber = MenuCount;\r
   return EFI_SUCCESS;\r
 }\r
@@ -643,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
@@ -684,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
@@ -698,8 +681,8 @@ 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->Deleted             = FALSE;\r
     NewLoadContext->IsLegacy            = FALSE;\r
@@ -761,13 +744,14 @@ BOpt_GetDriverOptions (
     }\r
 \r
     InsertTailList (&DriverOptionMenu.Head, &NewMenuEntry->Link);\r
+    FreePool (LoadOptionFromVar);\r
 \r
   }\r
 \r
   if (DriverOrderList != NULL) {\r
     FreePool (DriverOrderList);\r
   }\r
-  FreePool(LoadOption);\r
+\r
   DriverOptionMenu.MenuNumber = Index;\r
   return EFI_SUCCESS;\r
 \r
@@ -873,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
@@ -880,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
@@ -945,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
@@ -962,6 +952,7 @@ CreateBootOptionFromFile (
 \r
 **/\r
 BOOLEAN \r
+EFIAPI\r
 CreateDriverOptionFromFile (\r
   IN EFI_DEVICE_PATH_PROTOCOL    *FilePath\r
   )\r