Calculate enough space for 2 variables (public key and variable data) instead of directly setting them 1 by 1.
Fixed a bug in public key reclaim(). Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Dong Guo <guo.dong@intel.com> Reviewed-by: Yao Jiewen <jiewen.yao@intel.com> Reviewed-by: Zeng, Star <star.zeng@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15404 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@@ -1268,8 +1268,10 @@ VariableGetBestLanguage (
|
||||
so follow the argument sequence to check the Variables.
|
||||
|
||||
@param[in] Attributes Variable attributes for Variable entries.
|
||||
@param ... Variable argument list with type VARIABLE_ENTRY_CONSISTENCY *.
|
||||
A NULL terminates the list.
|
||||
@param ... The variable argument list with type VARIABLE_ENTRY_CONSISTENCY *.
|
||||
A NULL terminates the list. The VariableSize of
|
||||
VARIABLE_ENTRY_CONSISTENCY is the variable data size as input.
|
||||
It will be changed to variable total size as output.
|
||||
|
||||
@retval TRUE Have enough variable space to set the Variables successfully.
|
||||
@retval FALSE No enough variable space to set the Variables successfully.
|
||||
@@ -1293,6 +1295,8 @@ CheckRemainingSpaceForConsistency (
|
||||
VARIABLE_STORE_HEADER *VariableStoreHeader;
|
||||
VARIABLE_POINTER_TRACK VariablePtrTrack;
|
||||
VARIABLE_HEADER *NextVariable;
|
||||
UINTN VarNameSize;
|
||||
UINTN VarDataSize;
|
||||
|
||||
//
|
||||
// Non-Volatile related.
|
||||
@@ -1311,6 +1315,15 @@ CheckRemainingSpaceForConsistency (
|
||||
VA_START (Args, Attributes);
|
||||
VariableEntry = VA_ARG (Args, VARIABLE_ENTRY_CONSISTENCY *);
|
||||
while (VariableEntry != NULL) {
|
||||
//
|
||||
// Calculate variable total size.
|
||||
//
|
||||
VarNameSize = StrSize (VariableEntry->Name);
|
||||
VarNameSize += GET_PAD_SIZE (VarNameSize);
|
||||
VarDataSize = VariableEntry->VariableSize;
|
||||
VarDataSize += GET_PAD_SIZE (VarDataSize);
|
||||
VariableEntry->VariableSize = HEADER_ALIGN (sizeof (VARIABLE_HEADER) + VarNameSize + VarDataSize);
|
||||
|
||||
TotalNeededSize += VariableEntry->VariableSize;
|
||||
VariableEntry = VA_ARG (Args, VARIABLE_ENTRY_CONSISTENCY *);
|
||||
}
|
||||
@@ -1407,8 +1420,6 @@ AutoUpdateLangVariable (
|
||||
UINT32 Attributes;
|
||||
VARIABLE_POINTER_TRACK Variable;
|
||||
BOOLEAN SetLanguageCodes;
|
||||
UINTN VarNameSize;
|
||||
UINTN VarDataSize;
|
||||
VARIABLE_ENTRY_CONSISTENCY VariableEntry[2];
|
||||
|
||||
//
|
||||
@@ -1532,21 +1543,13 @@ AutoUpdateLangVariable (
|
||||
BestLang = GetLangFromSupportedLangCodes (mVariableModuleGlobal->LangCodes, Index, TRUE);
|
||||
|
||||
//
|
||||
// Calculate the needed variable size for Lang variable.
|
||||
// Check the variable space for both Lang and PlatformLang variable.
|
||||
//
|
||||
VarNameSize = StrSize (EFI_LANG_VARIABLE_NAME);
|
||||
VarDataSize = ISO_639_2_ENTRY_SIZE + 1;
|
||||
VariableEntry[0].VariableSize = sizeof (VARIABLE_HEADER) + VarNameSize + GET_PAD_SIZE (VarNameSize) + VarDataSize + GET_PAD_SIZE (VarDataSize);
|
||||
VariableEntry[0].VariableSize = HEADER_ALIGN (VariableEntry[0].VariableSize);
|
||||
VariableEntry[0].VariableSize = ISO_639_2_ENTRY_SIZE + 1;
|
||||
VariableEntry[0].Guid = &gEfiGlobalVariableGuid;
|
||||
VariableEntry[0].Name = EFI_LANG_VARIABLE_NAME;
|
||||
//
|
||||
// Calculate the needed variable size for PlatformLang variable.
|
||||
//
|
||||
VarNameSize = StrSize (EFI_PLATFORM_LANG_VARIABLE_NAME);
|
||||
VarDataSize = AsciiStrSize (BestPlatformLang);
|
||||
VariableEntry[1].VariableSize = sizeof (VARIABLE_HEADER) + VarNameSize + GET_PAD_SIZE (VarNameSize) + VarDataSize + GET_PAD_SIZE (VarDataSize);
|
||||
VariableEntry[1].VariableSize = HEADER_ALIGN (VariableEntry[1].VariableSize);
|
||||
|
||||
VariableEntry[1].VariableSize = AsciiStrSize (BestPlatformLang);
|
||||
VariableEntry[1].Guid = &gEfiGlobalVariableGuid;
|
||||
VariableEntry[1].Name = EFI_PLATFORM_LANG_VARIABLE_NAME;
|
||||
if (!CheckRemainingSpaceForConsistency (VARIABLE_ATTRIBUTE_NV_BS_RT, &VariableEntry[0], &VariableEntry[1], NULL)) {
|
||||
@@ -1589,21 +1592,13 @@ AutoUpdateLangVariable (
|
||||
BestPlatformLang = GetLangFromSupportedLangCodes (mVariableModuleGlobal->PlatformLangCodes, Index, FALSE);
|
||||
|
||||
//
|
||||
// Calculate the needed variable size for PlatformLang variable.
|
||||
// Check the variable space for both PlatformLang and Lang variable.
|
||||
//
|
||||
VarNameSize = StrSize (EFI_PLATFORM_LANG_VARIABLE_NAME);
|
||||
VarDataSize = AsciiStrSize (BestPlatformLang);
|
||||
VariableEntry[0].VariableSize = sizeof (VARIABLE_HEADER) + VarNameSize + GET_PAD_SIZE (VarNameSize) + VarDataSize + GET_PAD_SIZE (VarDataSize);
|
||||
VariableEntry[0].VariableSize = HEADER_ALIGN (VariableEntry[0].VariableSize);
|
||||
VariableEntry[0].VariableSize = AsciiStrSize (BestPlatformLang);
|
||||
VariableEntry[0].Guid = &gEfiGlobalVariableGuid;
|
||||
VariableEntry[0].Name = EFI_PLATFORM_LANG_VARIABLE_NAME;
|
||||
//
|
||||
// Calculate the needed variable size for Lang variable.
|
||||
//
|
||||
VarNameSize = StrSize (EFI_LANG_VARIABLE_NAME);
|
||||
VarDataSize = ISO_639_2_ENTRY_SIZE + 1;
|
||||
VariableEntry[1].VariableSize = sizeof (VARIABLE_HEADER) + VarNameSize + GET_PAD_SIZE (VarNameSize) + VarDataSize + GET_PAD_SIZE (VarDataSize);
|
||||
VariableEntry[1].VariableSize = HEADER_ALIGN (VariableEntry[1].VariableSize);
|
||||
|
||||
VariableEntry[1].VariableSize = ISO_639_2_ENTRY_SIZE + 1;
|
||||
VariableEntry[1].Guid = &gEfiGlobalVariableGuid;
|
||||
VariableEntry[1].Name = EFI_LANG_VARIABLE_NAME;
|
||||
if (!CheckRemainingSpaceForConsistency (VARIABLE_ATTRIBUTE_NV_BS_RT, &VariableEntry[0], &VariableEntry[1], NULL)) {
|
||||
|
Reference in New Issue
Block a user