This is caused by my last commit,the LoadOption may
not initialize when call FreePool, and after investigation,
find that we can delete the LoadOption variable, this patch
is to fix this issue.

Cc: Liming Gao <[email protected]>
Cc: Eric Dong <[email protected]>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Dandan Bi <[email protected]>
---
 .../BootMaintenanceManagerUiLib/BootOption.c       | 32 ++++++----------------
 1 file changed, 8 insertions(+), 24 deletions(-)

diff --git a/MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootOption.c 
b/MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootOption.c
index 5665d04..0bd3170 100644
--- a/MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootOption.c
+++ b/MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootOption.c
@@ -246,11 +246,10 @@ BOpt_GetBootOptions (
   )
 {
   UINTN                         Index;
   UINT16                        BootString[10];
   UINT8                         *LoadOptionFromVar;
-  UINT8                         *LoadOption;
   UINTN                         BootOptionSize;
   BOOLEAN                       BootNextFlag;
   UINT16                        *BootOrderList;
   UINTN                         BootOrderListSize;
   UINT16                        *BootNext;
@@ -310,18 +309,10 @@ BOpt_GetBootOptions (
     GetEfiGlobalVariable2 (BootString, (VOID **) &LoadOptionFromVar, 
&BootOptionSize);
     if (LoadOptionFromVar == NULL) {
       continue;
     }
 
-    LoadOption = AllocateZeroPool (BootOptionSize);
-    if (LoadOption == NULL) {
-      continue;
-    }
-
-    CopyMem (LoadOption, LoadOptionFromVar, BootOptionSize);
-    FreePool (LoadOptionFromVar);
-
     if (BootNext != NULL) {
       BootNextFlag = (BOOLEAN) (*BootNext == BootOrderList[Index]);
     } else {
       BootNextFlag = FALSE;
     }
@@ -329,21 +320,21 @@ BOpt_GetBootOptions (
     NewMenuEntry = BOpt_CreateMenuEntry (BM_LOAD_CONTEXT_SELECT);
     ASSERT (NULL != NewMenuEntry);
 
     NewLoadContext                      = (BM_LOAD_CONTEXT *) 
NewMenuEntry->VariableContext;
 
-    LoadOptionPtr                       = LoadOption;
-    LoadOptionEnd                       = LoadOption + BootOptionSize;
+    LoadOptionPtr                       = LoadOptionFromVar;
+    LoadOptionEnd                       = LoadOptionFromVar + BootOptionSize;
 
     NewMenuEntry->OptionNumber          = BootOrderList[Index];
     NewLoadContext->Deleted             = FALSE;
     NewLoadContext->IsBootNext          = BootNextFlag;
 
     //
     // Is a Legacy Device?
     //
-    Ptr = (UINT8 *) LoadOption;
+    Ptr = (UINT8 *) LoadOptionFromVar;
 
     //
     // Attribute = *(UINT32 *)Ptr;
     //
     Ptr += sizeof (UINT32);
@@ -421,21 +412,21 @@ BOpt_GetBootOptions (
         );
     }
 
     InsertTailList (&BootOptionMenu.Head, &NewMenuEntry->Link);
     MenuCount++;
+    FreePool (LoadOptionFromVar);
   }
   EfiBootManagerFreeLoadOptions (BootOption, BootOptionCount);
 
   if (BootNext != NULL) {
     FreePool (BootNext);
   }
   if (BootOrderList != NULL) {
     FreePool (BootOrderList);
   }
 
-  FreePool(LoadOption);
   BootOptionMenu.MenuNumber = MenuCount;
   return EFI_SUCCESS;
 }
 
 /**
@@ -641,11 +632,10 @@ BOpt_GetDriverOptions (
   )
 {
   UINTN           Index;
   UINT16          DriverString[12];
   UINT8           *LoadOptionFromVar;
-  UINT8           *LoadOption;
   UINTN           DriverOptionSize;
 
   UINT16          *DriverOrderList;
   UINTN           DriverOrderListSize;
   BM_MENU_ENTRY   *NewMenuEntry;
@@ -682,26 +672,19 @@ BOpt_GetDriverOptions (
     GetEfiGlobalVariable2 (DriverString, (VOID **) &LoadOptionFromVar, 
&DriverOptionSize);
     if (LoadOptionFromVar == NULL) {
       continue;
     }
 
-    LoadOption = AllocateZeroPool (DriverOptionSize);
-    if (LoadOption == NULL) {
-      continue;
-    }
-
-    CopyMem (LoadOption, LoadOptionFromVar, DriverOptionSize);
-    FreePool (LoadOptionFromVar);
 
     NewMenuEntry = BOpt_CreateMenuEntry (BM_LOAD_CONTEXT_SELECT);
     if (NULL == NewMenuEntry) {
       return EFI_OUT_OF_RESOURCES;
     }
 
     NewLoadContext                      = (BM_LOAD_CONTEXT *) 
NewMenuEntry->VariableContext;
-    LoadOptionPtr                       = LoadOption;
-    LoadOptionEnd                       = LoadOption + DriverOptionSize;
+    LoadOptionPtr                       = LoadOptionFromVar;
+    LoadOptionEnd                       = LoadOptionFromVar + DriverOptionSize;
     NewMenuEntry->OptionNumber          = DriverOrderList[Index];
     NewLoadContext->Deleted             = FALSE;
     NewLoadContext->IsLegacy            = FALSE;
 
     //
@@ -759,17 +742,18 @@ BOpt_GetDriverOptions (
         );
 
     }
 
     InsertTailList (&DriverOptionMenu.Head, &NewMenuEntry->Link);
+    FreePool (LoadOptionFromVar);
 
   }
 
   if (DriverOrderList != NULL) {
     FreePool (DriverOrderList);
   }
-  FreePool(LoadOption);
+
   DriverOptionMenu.MenuNumber = Index;
   return EFI_SUCCESS;
 
 }
 
-- 
1.9.5.msysgit.1

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to