The fix is also applicable for other toolchains like GCC or VS2010, so I will 
update the subject of 
this patch to: Fix the build fail issue on VS2008\VS2010\GCC.
And check in the patch to pass build.


Thanks,
Dandan

-----Original Message-----
From: Gao, Liming 
Sent: Wednesday, February 24, 2016 1:18 PM
To: Bi, Dandan; [email protected]
Cc: Dong, Eric
Subject: RE: [patch] MdeModulePkg: Fix the build fail issue on VS2008

Reviewed-by: Liming Gao <[email protected]>

-----Original Message-----
From: Bi, Dandan
Sent: Wednesday, February 24, 2016 1:08 PM
To: [email protected]
Cc: Gao, Liming <[email protected]>; Dong, Eric <[email protected]>
Subject: [patch] MdeModulePkg: Fix the build fail issue on VS2008

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