Remove SafeFreePool from MemoryAllocationLib as this API's name is misleading. Its implementation only check if a pointer is NULL. If a garbage pointer is passed in, the gBS->FreePool will still ASSERT in debug build and return error code.

It is recommended that module writer should keep track how a pointer is allocated and free it after use.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@6306 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
qwang12
2008-10-30 07:32:46 +00:00
parent bb1d8ee669
commit 676df92c2c
27 changed files with 652 additions and 410 deletions

View File

@@ -324,7 +324,8 @@ BdsCreateLegacyBootOption (
Buffer
);
SafeFreePool (Buffer);
FreePool (Buffer);
Buffer = NULL;
NewBootOrderList = AllocateZeroPool (*BootOrderListSize + sizeof (UINT16));
@@ -334,12 +335,11 @@ BdsCreateLegacyBootOption (
return EFI_OUT_OF_RESOURCES;
}
if (NULL != *BootOrderList) {
if (*BootOrderList != NULL) {
CopyMem (NewBootOrderList, *BootOrderList, *BootOrderListSize);
FreePool (*BootOrderList);
}
SafeFreePool (*BootOrderList);
BootOrderLastIndex = (UINTN) (*BootOrderListSize / sizeof (UINT16));
NewBootOrderList[BootOrderLastIndex] = CurrentBootOptionNo;
*BootOrderListSize += sizeof (UINT16);
@@ -462,7 +462,9 @@ BdsDeleteAllInvalidLegacyBootOptions (
&BootOptionSize
);
if (NULL == BootOptionVar) {
SafeFreePool (BootOrder);
if (BootOrder != NULL) {
FreePool (BootOrder);
}
return EFI_OUT_OF_RESOURCES;
}
@@ -470,7 +472,9 @@ BdsDeleteAllInvalidLegacyBootOptions (
// Skip Non-Legacy boot options
//
if (!BdsIsLegacyBootOption (BootOptionVar, &BbsEntry, &BbsIndex)) {
SafeFreePool (BootOptionVar);
if (BootOptionVar!= NULL) {
FreePool (BootOptionVar);
}
Index++;
continue;
}
@@ -499,7 +503,9 @@ BdsDeleteAllInvalidLegacyBootOptions (
continue;
}
SafeFreePool (BootOptionVar);
if (BootOptionVar != NULL) {
FreePool (BootOptionVar);
}
//
// should delete
//
@@ -525,7 +531,9 @@ BdsDeleteAllInvalidLegacyBootOptions (
EfiLibDeleteVariable (L"BootOrder", &gEfiGlobalVariableGuid);
}
SafeFreePool (BootOrder);
if (BootOrder != NULL) {
FreePool (BootOrder);
}
return Status;
}
@@ -588,19 +596,19 @@ BdsFindLegacyBootOptionByDevType (
// Skip Non-legacy boot option
//
if (!BdsIsLegacyBootOption (BootOptionVar, &BbsEntry, BbsIndex)) {
SafeFreePool (BootOptionVar);
FreePool (BootOptionVar);
continue;
}
if (BbsEntry->DeviceType != DevType) {
SafeFreePool (BootOptionVar);
FreePool (BootOptionVar);
continue;
}
*Attribute = *(UINT32 *) BootOptionVar;
*OptionNumber = Index;
Found = TRUE;
SafeFreePool (BootOptionVar);
FreePool (BootOptionVar);
break;
}
@@ -767,7 +775,7 @@ BdsAddNonExistingLegacyBootOptions (
}
if (BootOrder != NULL) {
SafeFreePool (BootOrder);
FreePool (BootOrder);
}
return Status;
@@ -952,7 +960,7 @@ BdsCreateDevOrder (
TotalSize,
DevOrder
);
SafeFreePool (DevOrder);
FreePool (DevOrder);
return Status;
}
@@ -1382,7 +1390,7 @@ BdsUpdateLegacyDevOrder (
}
}
SafeFreePool (DevOrder);
FreePool (DevOrder);
Status = gRT->SetVariable (
VAR_LEGACY_DEV_ORDER,
@@ -1391,7 +1399,7 @@ BdsUpdateLegacyDevOrder (
TotalSize,
NewDevOrder
);
SafeFreePool (NewDevOrder);
FreePool (NewDevOrder);
return Status;
}
@@ -1442,7 +1450,7 @@ BdsSetBootPriority4SameTypeDev (
}
if (DevOrder >= OrigBuffer + DevOrderSize) {
SafeFreePool (OrigBuffer);
FreePool (OrigBuffer);
return EFI_NOT_FOUND;
}
@@ -1463,7 +1471,7 @@ BdsSetBootPriority4SameTypeDev (
}
}
SafeFreePool (OrigBuffer);
FreePool (OrigBuffer);
return EFI_SUCCESS;
}
@@ -1619,7 +1627,7 @@ BdsRefreshBbsTableForBoot (
Ptr += StrSize ((UINT16 *) Ptr);
DevPath = (EFI_DEVICE_PATH_PROTOCOL *) Ptr;
if (BBS_DEVICE_PATH != DevPath->Type || BBS_BBS_DP != DevPath->SubType) {
SafeFreePool (BootOptionVar);
FreePool (BootOptionVar);
continue;
}
@@ -1628,7 +1636,7 @@ BdsRefreshBbsTableForBoot (
//
// We don't want to process twice for a device type
//
SafeFreePool (BootOptionVar);
FreePool (BootOptionVar);
continue;
}
@@ -1637,14 +1645,14 @@ BdsRefreshBbsTableForBoot (
LocalBbsTable,
&Priority
);
SafeFreePool (BootOptionVar);
FreePool (BootOptionVar);
if (EFI_ERROR (Status)) {
break;
}
}
if (BootOrder != NULL) {
SafeFreePool (BootOrder);
FreePool (BootOrder);
}
//
// For debug

View File

@@ -125,7 +125,9 @@ EfiGrowBuffer (
TryAgain = FALSE;
if (*Status == EFI_BUFFER_TOO_SMALL) {
SafeFreePool (*Buffer);
if (*Buffer != NULL) {
FreePool (*Buffer);
}
*Buffer = AllocateZeroPool (BufferSize);
@@ -139,7 +141,7 @@ EfiGrowBuffer (
// If there's an error, free the buffer
//
if (!TryAgain && EFI_ERROR (*Status) && (*Buffer != NULL)) {
SafeFreePool (*Buffer);
FreePool (*Buffer);
*Buffer = NULL;
}
@@ -201,7 +203,7 @@ EfiLibDeleteVariable (
//
Status = gRT->SetVariable (VarName, VarGuid, VAR_FLAG, 0, NULL);
ASSERT (!EFI_ERROR (Status));
SafeFreePool (VarBuf);
FreePool (VarBuf);
}
return Status;
@@ -373,7 +375,7 @@ EfiReallocatePool (
CopyMem (NewPool, OldPool, OldSize < NewSize ? OldSize : NewSize);
}
SafeFreePool (OldPool);
FreePool (OldPool);
}
return NewPool;

View File

@@ -811,7 +811,7 @@ InitializeBM (
//
Ptr = AllocateZeroPool (sizeof (BM_LOAD_CONTEXT) + sizeof (BM_FILE_CONTEXT) + sizeof (BM_HANDLE_CONTEXT) + sizeof (BM_MENU_ENTRY));
if (Ptr == NULL) {
SafeFreePool (BmmCallbackInfo);
FreePool (BmmCallbackInfo);
return EFI_OUT_OF_RESOURCES;
}
@@ -917,8 +917,8 @@ InitializeBM (
gUpdateData.BufferSize = UPDATE_DATA_SIZE;
gUpdateData.Data = AllocateZeroPool (UPDATE_DATA_SIZE);
if (gUpdateData.Data == NULL) {
SafeFreePool (BmmCallbackInfo->LoadContext);
SafeFreePool (BmmCallbackInfo);
FreePool (BmmCallbackInfo->LoadContext);
FreePool (BmmCallbackInfo);
return EFI_OUT_OF_RESOURCES;
}
@@ -1020,9 +1020,9 @@ InitializeBM (
FreeAllMenu ();
SafeFreePool (BmmCallbackInfo->LoadContext);
SafeFreePool (BmmCallbackInfo);
SafeFreePool (gUpdateData.Data);
FreePool (BmmCallbackInfo->LoadContext);
FreePool (BmmCallbackInfo);
FreePool (gUpdateData.Data);
gUpdateData.Data = NULL;
return Status;
@@ -1205,7 +1205,7 @@ CleanUpStringDepository (
CurrentListNode = StringDepository->ListHead;
for (NodeIndex = 0; NodeIndex < StringDepository->TotalNodeNumber; NodeIndex++) {
NextListNode = CurrentListNode->Next;
SafeFreePool (CurrentListNode);
FreePool (CurrentListNode);
CurrentListNode = NextListNode;
}
@@ -1214,7 +1214,7 @@ CleanUpStringDepository (
//
// Release string depository.
//
SafeFreePool (FileOptionStrDepository);
FreePool (FileOptionStrDepository);
}
/**

View File

@@ -83,7 +83,7 @@ BOpt_CreateMenuEntry (
MenuEntry->VariableContext = AllocateZeroPool (ContextSize);
if (NULL == MenuEntry->VariableContext) {
SafeFreePool (MenuEntry);
FreePool (MenuEntry);
return NULL;
}
@@ -116,59 +116,65 @@ BOpt_DestroyMenuEntry (
switch (MenuEntry->ContextSelection) {
case BM_LOAD_CONTEXT_SELECT:
LoadContext = (BM_LOAD_CONTEXT *) MenuEntry->VariableContext;
SafeFreePool (LoadContext->FilePathList);
SafeFreePool (LoadContext->LoadOption);
SafeFreePool (LoadContext->OptionalData);
SafeFreePool (LoadContext);
FreePool (LoadContext->FilePathList);
FreePool (LoadContext->LoadOption);
if (LoadContext->OptionalData != NULL) {
FreePool (LoadContext->OptionalData);
}
FreePool (LoadContext);
break;
case BM_FILE_CONTEXT_SELECT:
FileContext = (BM_FILE_CONTEXT *) MenuEntry->VariableContext;
if (!FileContext->IsRoot) {
SafeFreePool (FileContext->DevicePath);
FreePool (FileContext->DevicePath);
} else {
if (FileContext->FHandle != NULL) {
FileContext->FHandle->Close (FileContext->FHandle);
}
}
SafeFreePool (FileContext->FileName);
SafeFreePool (FileContext->Info);
SafeFreePool (FileContext);
if (FileContext->FileName != NULL) {
FreePool (FileContext->FileName);
}
if (FileContext->Info != NULL) {
FreePool (FileContext->Info);
}
FreePool (FileContext);
break;
case BM_CONSOLE_CONTEXT_SELECT:
ConsoleContext = (BM_CONSOLE_CONTEXT *) MenuEntry->VariableContext;
SafeFreePool (ConsoleContext->DevicePath);
SafeFreePool (ConsoleContext);
FreePool (ConsoleContext->DevicePath);
FreePool (ConsoleContext);
break;
case BM_TERMINAL_CONTEXT_SELECT:
TerminalContext = (BM_TERMINAL_CONTEXT *) MenuEntry->VariableContext;
SafeFreePool (TerminalContext->DevicePath);
SafeFreePool (TerminalContext);
FreePool (TerminalContext->DevicePath);
FreePool (TerminalContext);
break;
case BM_HANDLE_CONTEXT_SELECT:
HandleContext = (BM_HANDLE_CONTEXT *) MenuEntry->VariableContext;
SafeFreePool (HandleContext);
FreePool (HandleContext);
break;
case BM_LEGACY_DEV_CONTEXT_SELECT:
LegacyDevContext = (BM_LEGACY_DEVICE_CONTEXT *) MenuEntry->VariableContext;
SafeFreePool (LegacyDevContext);
FreePool (LegacyDevContext);
default:
break;
}
SafeFreePool (MenuEntry->DisplayString);
FreePool (MenuEntry->DisplayString);
if (NULL != MenuEntry->HelpString) {
SafeFreePool (MenuEntry->HelpString);
FreePool (MenuEntry->HelpString);
}
SafeFreePool (MenuEntry);
FreePool (MenuEntry);
}
/**
@@ -278,7 +284,7 @@ BOpt_FindFileSystem (
if (BlkIo->Media->RemovableMedia) {
Buffer = AllocateZeroPool (BlkIo->Media->BlockSize);
if (NULL == Buffer) {
SafeFreePool (BlkIoHandle);
FreePool (BlkIoHandle);
return EFI_OUT_OF_RESOURCES;
}
@@ -289,10 +295,10 @@ BOpt_FindFileSystem (
BlkIo->Media->BlockSize,
Buffer
);
SafeFreePool (Buffer);
FreePool (Buffer);
}
}
SafeFreePool (BlkIoHandle);
FreePool (BlkIoHandle);
}
//
@@ -332,7 +338,7 @@ BOpt_FindFileSystem (
//
MenuEntry = BOpt_CreateMenuEntry (BM_FILE_CONTEXT_SELECT);
if (NULL == MenuEntry) {
SafeFreePool (SimpleFsHandle);
FreePool (SimpleFsHandle);
return EFI_OUT_OF_RESOURCES;
}
@@ -390,7 +396,7 @@ BOpt_FindFileSystem (
}
if (NoSimpleFsHandles != 0) {
SafeFreePool (SimpleFsHandle);
FreePool (SimpleFsHandle);
}
//
// Searching for handles that support Load File protocol
@@ -407,7 +413,7 @@ BOpt_FindFileSystem (
for (Index = 0; Index < NoLoadFileHandles; Index++) {
MenuEntry = BOpt_CreateMenuEntry (BM_FILE_CONTEXT_SELECT);
if (NULL == MenuEntry) {
SafeFreePool (LoadFileHandle);
FreePool (LoadFileHandle);
return EFI_OUT_OF_RESOURCES;
}
@@ -438,7 +444,7 @@ BOpt_FindFileSystem (
}
if (NoLoadFileHandles != 0) {
SafeFreePool (LoadFileHandle);
FreePool (LoadFileHandle);
}
//
@@ -676,7 +682,7 @@ BOpt_FindFiles (
}
DirectoryMenu.MenuNumber = OptionNumber;
SafeFreePool (DirInfo);
FreePool (DirInfo);
return EFI_SUCCESS;
}
@@ -898,7 +904,7 @@ BOpt_GetBootOptions (
if (BootNext != NULL) {
if (BootNextSize != sizeof (UINT16)) {
SafeFreePool (BootNext);
FreePool (BootNext);
BootNext = NULL;
}
}
@@ -923,7 +929,7 @@ BOpt_GetBootOptions (
}
CopyMem (LoadOption, LoadOptionFromVar, BootOptionSize);
SafeFreePool (LoadOptionFromVar);
FreePool (LoadOptionFromVar);
if (BootNext != NULL) {
BootNextFlag = (BOOLEAN) (*BootNext == BootOrderList[Index]);
@@ -932,7 +938,7 @@ BOpt_GetBootOptions (
}
if (0 == (*((UINT32 *) LoadOption) & LOAD_OPTION_ACTIVE)) {
SafeFreePool (LoadOption);
FreePool (LoadOption);
continue;
}
//
@@ -1054,8 +1060,12 @@ BOpt_GetBootOptions (
MenuCount++;
}
SafeFreePool (BootNext);
SafeFreePool (BootOrderList);
if (BootNext != NULL) {
FreePool (BootNext);
}
if (BootOrderList != NULL) {
FreePool (BootOrderList);
}
BootOptionMenu.MenuNumber = MenuCount;
return MenuCount;
}
@@ -1318,7 +1328,7 @@ BOpt_FindDrivers (
NewMenuEntry = BOpt_CreateMenuEntry (BM_HANDLE_CONTEXT_SELECT);
if (NULL == NewMenuEntry) {
SafeFreePool (DevicePathHandle);
FreePool (DevicePathHandle);
return EFI_OUT_OF_RESOURCES;
}
@@ -1332,7 +1342,10 @@ BOpt_FindDrivers (
InsertTailList (&DriverMenu.Head, &NewMenuEntry->Link);
}
SafeFreePool (DevicePathHandle);
if (DevicePathHandle != NULL) {
FreePool (DevicePathHandle);
}
DriverMenu.MenuNumber = OptionNumber;
return EFI_SUCCESS;
@@ -1545,7 +1558,7 @@ BOpt_GetDriverOptions (
}
CopyMem (LoadOption, LoadOptionFromVar, DriverOptionSize);
SafeFreePool (LoadOptionFromVar);
FreePool (LoadOptionFromVar);
NewMenuEntry = BOpt_CreateMenuEntry (BM_LOAD_CONTEXT_SELECT);
if (NULL == NewMenuEntry) {
@@ -1631,7 +1644,9 @@ BOpt_GetDriverOptions (
}
SafeFreePool (DriverOrderList);
if (DriverOrderList != NULL) {
FreePool (DriverOrderList);
}
DriverOptionMenu.MenuNumber = Index;
return EFI_SUCCESS;

View File

@@ -419,7 +419,7 @@ LocateSerialIo (
if (CompareMem (&Acpi->HID, &Match, sizeof (UINT32)) == 0) {
NewMenuEntry = BOpt_CreateMenuEntry (BM_TERMINAL_CONTEXT_SELECT);
if (NewMenuEntry == NULL) {
SafeFreePool (Handles);
FreePool (Handles);
return EFI_OUT_OF_RESOURCES;
}
@@ -472,7 +472,9 @@ LocateSerialIo (
TerminalMenu.MenuNumber++;
}
}
SafeFreePool (Handles);
if (Handles != NULL) {
FreePool (Handles);
}
//
// Get L"ConOut", L"ConIn" and L"ErrOut" from the Var
@@ -515,7 +517,9 @@ LocateSerialIo (
NewTerminalContext->DevicePath,
(EFI_DEVICE_PATH_PROTOCOL *) &Vendor
);
SafeFreePool (NewMenuEntry->HelpString);
if (NewMenuEntry->HelpString != NULL) {
FreePool (NewMenuEntry->HelpString);
}
//
// NewMenuEntry->HelpString = DevicePathToStr (NewDevicePath);
// NewMenuEntry->DisplayString = NewMenuEntry->HelpString;
@@ -999,6 +1003,6 @@ GetConsoleOutMode (
}
}
}
FreePool (ModeInfo);
}
SafeFreePool (ModeInfo);
}

View File

@@ -549,7 +549,7 @@ UpdateOrderPage (
);
}
SafeFreePool (IfrOptionList);
FreePool (IfrOptionList);
UpdatePageEnd (CallbackData);
@@ -626,7 +626,7 @@ UpdateBootNextPage (
&gUpdateData
);
SafeFreePool (IfrOptionList);
FreePool (IfrOptionList);
}
UpdatePageEnd (CallbackData);
@@ -771,8 +771,8 @@ UpdateConModePage (
ValidMode,
&gUpdateData
);
SafeFreePool (IfrOptionList);
SafeFreePool (ModeToken);
FreePool (IfrOptionList);
FreePool (ModeToken);
UpdatePageEnd (CallbackData);
}
@@ -946,7 +946,7 @@ UpdateTerminalPage (
&gUpdateData
);
SafeFreePool (IfrOptionList);
FreePool (IfrOptionList);
UpdatePageEnd (CallbackData);
}
@@ -1063,14 +1063,14 @@ GetLegacyBootOptionVar (
(BBS_BBS_DP == DevicePath->SubType)
) {
*OptionIndex = OrderBuffer[Index];
SafeFreePool (OrderBuffer);
FreePool (OrderBuffer);
return OptionBuffer;
} else {
SafeFreePool (OptionBuffer);
FreePool (OptionBuffer);
}
}
SafeFreePool (OrderBuffer);
FreePool (OrderBuffer);
return NULL;
}
@@ -1271,7 +1271,7 @@ UpdateSetLegacyDeviceOrderPage (
CopyMem (OldData, LegacyOrder, 100);
if (IfrOptionList != NULL) {
SafeFreePool (IfrOptionList);
FreePool (IfrOptionList);
IfrOptionList = NULL;
}

View File

@@ -122,7 +122,7 @@ Var_ChangeBootOrder (
//
if (BootOrderList != NULL) {
EfiLibDeleteVariable (L"BootOrder", &gEfiGlobalVariableGuid);
SafeFreePool (BootOrderList);
FreePool (BootOrderList);
BootOrderList = NULL;
}
//
@@ -268,7 +268,7 @@ Var_ChangeDriverOrder (
//
if (DriverOrderList != NULL) {
EfiLibDeleteVariable (L"DriverOrder", &gEfiGlobalVariableGuid);
SafeFreePool (DriverOrderList);
FreePool (DriverOrderList);
DriverOrderList = NULL;
}
@@ -407,7 +407,7 @@ Var_UpdateConsoleOption (
ConDevicePath = EfiLibGetVariable (ConsoleName, &gEfiGlobalVariableGuid);
if (ConDevicePath != NULL) {
EfiLibDeleteVariable (ConsoleName, &gEfiGlobalVariableGuid);
SafeFreePool (ConDevicePath);
FreePool (ConDevicePath);
ConDevicePath = NULL;
};
@@ -689,10 +689,11 @@ Var_UpdateDriverOption (
NewDriverOrderList
);
ASSERT_EFI_ERROR (Status);
SafeFreePool (DriverOrderList);
if (DriverOrderList != NULL) {
FreePool (DriverOrderList);
}
DriverOrderList = NULL;
SafeFreePool (NewDriverOrderList);
NewDriverOrderList = NULL;
FreePool (NewDriverOrderList);
InsertTailList (&DriverOptionMenu.Head, &NewMenuEntry->Link);
DriverOptionMenu.MenuNumber++;
@@ -849,6 +850,7 @@ Var_UpdateBootOption (
if (BootOrderList != NULL) {
EfiLibDeleteVariable (L"BootOrder", &gEfiGlobalVariableGuid);
FreePool (BootOrderList);
}
Status = gRT->SetVariable (
@@ -860,9 +862,7 @@ Var_UpdateBootOption (
);
ASSERT_EFI_ERROR (Status);
SafeFreePool (BootOrderList);
BootOrderList = NULL;
SafeFreePool (NewBootOrderList);
FreePool (NewBootOrderList);
NewBootOrderList = NULL;
InsertTailList (&BootOptionMenu.Head, &NewMenuEntry->Link);
BootOptionMenu.MenuNumber++;
@@ -976,6 +976,7 @@ Var_UpdateBootOrder (
//
if (BootOrderList != NULL) {
EfiLibDeleteVariable (L"BootOrder", &gEfiGlobalVariableGuid);
FreePool (BootOrderList);
}
for (Index = 0; Index < BootOptionMenu.MenuNumber; Index++) {
@@ -989,8 +990,7 @@ Var_UpdateBootOrder (
BootOrderListSize,
NewBootOrderList
);
SafeFreePool (BootOrderList);
SafeFreePool (NewBootOrderList);
FreePool (NewBootOrderList);
if (EFI_ERROR (Status)) {
return Status;
}
@@ -1048,6 +1048,7 @@ Var_UpdateDriverOrder (
//
if (DriverOrderList != NULL) {
EfiLibDeleteVariable (L"DriverOrder", &gEfiGlobalVariableGuid);
FreePool (DriverOrderList);
}
for (Index = 0; Index < DriverOrderListSize; Index++) {
@@ -1065,8 +1066,6 @@ Var_UpdateDriverOrder (
return Status;
}
SafeFreePool (DriverOrderList);
BOpt_FreeMenu (&DriverOptionMenu);
BOpt_GetDriverOptions (CallbackData);
return EFI_SUCCESS;
@@ -1190,13 +1189,13 @@ Var_UpdateBBSOption (
}
if (VarData >= VarData + VarSize) {
SafeFreePool (OriginalPtr);
FreePool (OriginalPtr);
return EFI_NOT_FOUND;
}
NewOrder = (UINT16 *) AllocateZeroPool (DevOrder->Length - sizeof (UINT16));
if (NULL == NewOrder) {
SafeFreePool (VarData);
FreePool (VarData);
return EFI_OUT_OF_RESOURCES;
}
@@ -1229,7 +1228,7 @@ Var_UpdateBBSOption (
NewOrder,
DevOrder->Length - sizeof (UINT16)
);
SafeFreePool (NewOrder);
FreePool (NewOrder);
Status = gRT->SetVariable (
VAR_LEGACY_DEV_ORDER,
@@ -1239,7 +1238,7 @@ Var_UpdateBBSOption (
OriginalPtr
);
SafeFreePool (OriginalPtr);
FreePool (OriginalPtr);
//
// Update Optional Data of Boot####
@@ -1371,8 +1370,8 @@ Var_UpdateBBSOption (
NewOptionPtr
);
SafeFreePool (NewOptionPtr);
SafeFreePool (BootOptionVar);
FreePool (NewOptionPtr);
FreePool (BootOptionVar);
}
BOpt_GetBootOptions (CallbackData);