ASSERT (gVariableInfo != NULL);\r
\r
CopyGuid (&gVariableInfo->VendorGuid, VendorGuid);\r
- gVariableInfo->Name = AllocatePool (StrSize (VariableName));\r
+ gVariableInfo->Name = AllocateZeroPool (StrSize (VariableName));\r
ASSERT (gVariableInfo->Name != NULL);\r
- StrCpy (gVariableInfo->Name, VariableName);\r
+ StrnCpy (gVariableInfo->Name, VariableName, StrLen (VariableName));\r
gVariableInfo->Volatile = Volatile;\r
}\r
\r
ASSERT (Entry->Next != NULL);\r
\r
CopyGuid (&Entry->Next->VendorGuid, VendorGuid);\r
- Entry->Next->Name = AllocatePool (StrSize (VariableName));\r
+ Entry->Next->Name = AllocateZeroPool (StrSize (VariableName));\r
ASSERT (Entry->Next->Name != NULL);\r
- StrCpy (Entry->Next->Name, VariableName);\r
+ StrnCpy (Entry->Next->Name, VariableName, StrLen (VariableName));\r
Entry->Next->Volatile = Volatile;\r
}\r
\r
\r
This code checks if variable header is valid or not.\r
\r
- @param Variable Pointer to the Variable Header.\r
+ @param Variable Pointer to the Variable Header.\r
+ @param VariableStoreEnd Pointer to the Variable Store End.\r
\r
- @retval TRUE Variable header is valid.\r
- @retval FALSE Variable header is not valid.\r
+ @retval TRUE Variable header is valid.\r
+ @retval FALSE Variable header is not valid.\r
\r
**/\r
BOOLEAN\r
IsValidVariableHeader (\r
- IN VARIABLE_HEADER *Variable\r
+ IN VARIABLE_HEADER *Variable,\r
+ IN VARIABLE_HEADER *VariableStoreEnd\r
)\r
{\r
- if (Variable == NULL || Variable->StartId != VARIABLE_DATA) {\r
+ if ((Variable == NULL) || (Variable >= VariableStoreEnd) || (Variable->StartId != VARIABLE_DATA)) {\r
+ //\r
+ // Variable is NULL or has reached the end of variable store,\r
+ // or the StartId is not correct.\r
+ //\r
return FALSE;\r
}\r
\r
{\r
UINTN Value;\r
\r
- if (!IsValidVariableHeader (Variable)) {\r
- return NULL;\r
- }\r
-\r
Value = (UINTN) GetVariableDataPtr (Variable);\r
Value += DataSizeOfVariable (Variable);\r
Value += GET_PAD_SIZE (DataSizeOfVariable (Variable));\r
Variable = GetStartPointer (VariableStoreHeader);\r
MaximumBufferSize = sizeof (VARIABLE_STORE_HEADER);\r
\r
- while (IsValidVariableHeader (Variable)) {\r
+ while (IsValidVariableHeader (Variable, GetEndPointer (VariableStoreHeader))) {\r
NextVariable = GetNextVariablePtr (Variable);\r
if ((Variable->State == VAR_ADDED || Variable->State == (VAR_IN_DELETED_TRANSITION & VAR_ADDED)) &&\r
Variable != UpdatingVariable &&\r
// Reinstall all ADDED variables as long as they are not identical to Updating Variable.\r
// \r
Variable = GetStartPointer (VariableStoreHeader);\r
- while (IsValidVariableHeader (Variable)) {\r
+ while (IsValidVariableHeader (Variable, GetEndPointer (VariableStoreHeader))) {\r
NextVariable = GetNextVariablePtr (Variable);\r
if (Variable != UpdatingVariable && Variable->State == VAR_ADDED) {\r
VariableSize = (UINTN) NextVariable - (UINTN) Variable;\r
// Reinstall all in delete transition variables.\r
// \r
Variable = GetStartPointer (VariableStoreHeader);\r
- while (IsValidVariableHeader (Variable)) {\r
+ while (IsValidVariableHeader (Variable, GetEndPointer (VariableStoreHeader))) {\r
NextVariable = GetNextVariablePtr (Variable);\r
if (Variable != UpdatingVariable && Variable != UpdatingInDeletedTransition && Variable->State == (VAR_IN_DELETED_TRANSITION & VAR_ADDED)) {\r
\r
\r
FoundAdded = FALSE;\r
AddedVariable = GetStartPointer ((VARIABLE_STORE_HEADER *) ValidBuffer);\r
- while (IsValidVariableHeader (AddedVariable)) {\r
+ while (IsValidVariableHeader (AddedVariable, GetEndPointer ((VARIABLE_STORE_HEADER *) ValidBuffer))) {\r
NextAddedVariable = GetNextVariablePtr (AddedVariable);\r
NameSize = NameSizeOfVariable (AddedVariable);\r
if (CompareGuid (&AddedVariable->VendorGuid, &Variable->VendorGuid) &&\r
mVariableModuleGlobal->CommonVariableTotalSize = CommonVariableTotalSize;\r
} else {\r
NextVariable = GetStartPointer ((VARIABLE_STORE_HEADER *)(UINTN)VariableBase);\r
- while (IsValidVariableHeader (NextVariable)) {\r
+ while (IsValidVariableHeader (NextVariable, GetEndPointer ((VARIABLE_STORE_HEADER *)(UINTN)VariableBase))) {\r
VariableSize = NextVariable->NameSize + NextVariable->DataSize + sizeof (VARIABLE_HEADER);\r
if ((Variable->Attributes & EFI_VARIABLE_HARDWARE_ERROR_RECORD) == EFI_VARIABLE_HARDWARE_ERROR_RECORD) {\r
mVariableModuleGlobal->HwErrVariableTotalSize += HEADER_ALIGN (VariableSize);\r
InDeletedVariable = NULL;\r
\r
for ( PtrTrack->CurrPtr = PtrTrack->StartPtr\r
- ; (PtrTrack->CurrPtr < PtrTrack->EndPtr) && IsValidVariableHeader (PtrTrack->CurrPtr)\r
+ ; IsValidVariableHeader (PtrTrack->CurrPtr, PtrTrack->EndPtr)\r
; PtrTrack->CurrPtr = GetNextVariablePtr (PtrTrack->CurrPtr)\r
) {\r
if (PtrTrack->CurrPtr->State == VAR_ADDED || \r
return EFI_ACCESS_DENIED;\r
}\r
\r
- Entry = AllocateRuntimePool (sizeof (*Entry) + StrSize (VariableName));\r
+ Entry = AllocateRuntimeZeroPool (sizeof (*Entry) + StrSize (VariableName));\r
if (Entry == NULL) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
AcquireLockOnlyAtBootTime(&mVariableModuleGlobal->VariableGlobal.VariableServicesLock);\r
\r
Entry->Name = (CHAR16 *) (Entry + 1);\r
- StrCpy (Entry->Name, VariableName);\r
+ StrnCpy (Entry->Name, VariableName, StrLen (VariableName));\r
CopyGuid (&Entry->Guid, VendorGuid);\r
InsertTailList (&mLockedVariableList, &Entry->Link);\r
\r
//\r
// Switch from Volatile to HOB, to Non-Volatile.\r
//\r
- while ((Variable.CurrPtr >= Variable.EndPtr) ||\r
- (Variable.CurrPtr == NULL) ||\r
- !IsValidVariableHeader (Variable.CurrPtr)\r
- ) {\r
+ while (!IsValidVariableHeader (Variable.CurrPtr, Variable.EndPtr)) {\r
//\r
// Find current storage index\r
//\r
// Parse non-volatile variable data and get last variable offset.\r
//\r
NextVariable = GetStartPointer ((VARIABLE_STORE_HEADER *) (UINTN) Point);\r
- while ((NextVariable < GetEndPointer ((VARIABLE_STORE_HEADER *) (UINTN) Point)) \r
- && IsValidVariableHeader (NextVariable)) {\r
+ while (IsValidVariableHeader (NextVariable, GetEndPointer ((VARIABLE_STORE_HEADER *) (UINTN) Point))) {\r
NextVariable = GetNextVariablePtr (NextVariable);\r
}\r
mVariableModuleGlobal->NonVolatileLastVariableOffset = (UINTN) NextVariable - (UINTN) Point;\r
//\r
// Now walk through the related variable store.\r
//\r
- while ((Variable < GetEndPointer (VariableStoreHeader)) && IsValidVariableHeader (Variable)) {\r
+ while (IsValidVariableHeader (Variable, GetEndPointer (VariableStoreHeader))) {\r
NextVariable = GetNextVariablePtr (Variable);\r
VariableSize = (UINT64) (UINTN) NextVariable - (UINT64) (UINTN) Variable;\r
\r
// Parse non-volatile variable data and get last variable offset.\r
//\r
NextVariable = GetStartPointer ((VARIABLE_STORE_HEADER *)(UINTN)VariableStoreBase);\r
- while (IsValidVariableHeader (NextVariable)) {\r
+ while (IsValidVariableHeader (NextVariable, GetEndPointer ((VARIABLE_STORE_HEADER *)(UINTN)VariableStoreBase))) {\r
VariableSize = NextVariable->NameSize + NextVariable->DataSize + sizeof (VARIABLE_HEADER);\r
if ((NextVariable->Attributes & (EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_HARDWARE_ERROR_RECORD)) == (EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_HARDWARE_ERROR_RECORD)) {\r
mVariableModuleGlobal->HwErrVariableTotalSize += HEADER_ALIGN (VariableSize);\r
//\r
mVariableModuleGlobal->VariableGlobal.HobVariableBase = 0;\r
for ( Variable = GetStartPointer (VariableStoreHeader)\r
- ; (Variable < GetEndPointer (VariableStoreHeader) && IsValidVariableHeader (Variable))\r
+ ; IsValidVariableHeader (Variable, GetEndPointer (VariableStoreHeader))\r
; Variable = GetNextVariablePtr (Variable)\r
) {\r
if (Variable->State != VAR_ADDED) {\r
EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader;\r
EFI_FVB_ATTRIBUTES_2 Attributes;\r
\r
+ Fvb = NULL;\r
+ HandleBuffer = NULL;\r
+\r
//\r
// Get all FVB handles.\r
//\r