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

