The file VariableParsing.c provides generic functionality related to parsing variable related structures and information. In order to calculate offsets for certain operations, the functions must know if authenticated variables are enabled as this increases the size of variable headers.
This change removes linking against a global variable in an external file in favor of a statically scoped variable in VariableParsing.c Because this file is unaware of how the authenticated variable status is determined, the variable is set through a function interface invoked during variable driver initialization. Cc: Dandan Bi <dandan...@intel.com> Cc: Ard Biesheuvel <ard.biesheu...@linaro.org> Cc: Eric Dong <eric.d...@intel.com> Cc: Laszlo Ersek <ler...@redhat.com> Cc: Liming Gao <liming....@intel.com> Cc: Michael D Kinney <michael.d.kin...@intel.com> Cc: Ray Ni <ray...@intel.com> Cc: Jian J Wang <jian.j.w...@intel.com> Cc: Hao A Wu <hao.a...@intel.com> Cc: Jiewen Yao <jiewen....@intel.com> Signed-off-by: Michael Kubacki <michael.a.kuba...@intel.com> --- MdeModulePkg/Universal/Variable/RuntimeDxe/VariableParsing.h | 14 +++++++++ MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c | 10 +++--- MdeModulePkg/Universal/Variable/RuntimeDxe/VariableParsing.c | 33 ++++++++++++++++---- 3 files changed, 45 insertions(+), 12 deletions(-) diff --git a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableParsing.h b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableParsing.h index 6f2000f3ee..3eba590634 100644 --- a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableParsing.h +++ b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableParsing.h @@ -308,4 +308,18 @@ UpdateVariableInfo ( IN OUT VARIABLE_INFO_ENTRY **VariableInfo ); +/** + Initializes context needed for variable parsing functions. + + @param[in] AuthFormat If true then indicates authenticated variables are supported + + @retval EFI_SUCCESS Initialized successfully + @retval Others An error occurred during initialization +**/ +EFI_STATUS +EFIAPI +InitVariableParsing ( + IN BOOLEAN AuthFormat + ); + #endif diff --git a/MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c b/MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c index 1a57d7e1ba..53d797152c 100644 --- a/MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c +++ b/MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c @@ -3326,6 +3326,9 @@ InitNonVolatileVariableStore ( mVariableModuleGlobal->MaxVariableSize = PcdGet32 (PcdMaxVariableSize); mVariableModuleGlobal->MaxAuthVariableSize = ((PcdGet32 (PcdMaxAuthVariableSize) != 0) ? PcdGet32 (PcdMaxAuthVariableSize) : mVariableModuleGlobal->MaxVariableSize); + Status = InitVariableParsing (mVariableModuleGlobal->VariableGlobal.AuthFormat); + ASSERT_EFI_ERROR (Status); + // // Parse non-volatile variable data and get last variable offset. // @@ -3756,18 +3759,13 @@ VariableCommonInitialize ( // // mVariableModuleGlobal->VariableGlobal.AuthFormat - // has been initialized in InitNonVolatileVariableStore(). + // is initialized in InitNonVolatileVariableStore(). // if (mVariableModuleGlobal->VariableGlobal.AuthFormat) { DEBUG ((EFI_D_INFO, "Variable driver will work with auth variable format!\n")); - // - // Set AuthSupport to FALSE first, VariableWriteServiceInitialize() will initialize it. - // - mVariableModuleGlobal->VariableGlobal.AuthSupport = FALSE; VariableGuid = &gEfiAuthenticatedVariableGuid; } else { DEBUG ((EFI_D_INFO, "Variable driver will work without auth variable support!\n")); - mVariableModuleGlobal->VariableGlobal.AuthSupport = FALSE; VariableGuid = &gEfiVariableGuid; } diff --git a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableParsing.c b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableParsing.c index 394195342d..0a47f6d10d 100644 --- a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableParsing.c +++ b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableParsing.c @@ -9,6 +9,8 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include "VariableParsing.h" +STATIC BOOLEAN mAuthFormat; + /** This code checks if variable header is valid or not. @@ -88,7 +90,7 @@ GetVariableHeaderSize ( { UINTN Value; - if (mVariableModuleGlobal->VariableGlobal.AuthFormat) { + if (mAuthFormat) { Value = sizeof (AUTHENTICATED_VARIABLE_HEADER); } else { Value = sizeof (VARIABLE_HEADER); @@ -114,7 +116,7 @@ NameSizeOfVariable ( AUTHENTICATED_VARIABLE_HEADER *AuthVariable; AuthVariable = (AUTHENTICATED_VARIABLE_HEADER *) Variable; - if (mVariableModuleGlobal->VariableGlobal.AuthFormat) { + if (mAuthFormat) { if (AuthVariable->State == (UINT8) (-1) || AuthVariable->DataSize == (UINT32) (-1) || AuthVariable->NameSize == (UINT32) (-1) || @@ -149,7 +151,7 @@ SetNameSizeOfVariable ( AUTHENTICATED_VARIABLE_HEADER *AuthVariable; AuthVariable = (AUTHENTICATED_VARIABLE_HEADER *) Variable; - if (mVariableModuleGlobal->VariableGlobal.AuthFormat) { + if (mAuthFormat) { AuthVariable->NameSize = (UINT32) NameSize; } else { Variable->NameSize = (UINT32) NameSize; @@ -173,7 +175,7 @@ DataSizeOfVariable ( AUTHENTICATED_VARIABLE_HEADER *AuthVariable; AuthVariable = (AUTHENTICATED_VARIABLE_HEADER *) Variable; - if (mVariableModuleGlobal->VariableGlobal.AuthFormat) { + if (mAuthFormat) { if (AuthVariable->State == (UINT8) (-1) || AuthVariable->DataSize == (UINT32) (-1) || AuthVariable->NameSize == (UINT32) (-1) || @@ -208,7 +210,7 @@ SetDataSizeOfVariable ( AUTHENTICATED_VARIABLE_HEADER *AuthVariable; AuthVariable = (AUTHENTICATED_VARIABLE_HEADER *) Variable; - if (mVariableModuleGlobal->VariableGlobal.AuthFormat) { + if (mAuthFormat) { AuthVariable->DataSize = (UINT32) DataSize; } else { Variable->DataSize = (UINT32) DataSize; @@ -248,7 +250,7 @@ GetVendorGuidPtr ( AUTHENTICATED_VARIABLE_HEADER *AuthVariable; AuthVariable = (AUTHENTICATED_VARIABLE_HEADER *) Variable; - if (mVariableModuleGlobal->VariableGlobal.AuthFormat) { + if (mAuthFormat) { return &AuthVariable->VendorGuid; } else { return &Variable->VendorGuid; @@ -746,3 +748,22 @@ UpdateVariableInfo ( } } } + +/** + Initializes context needed for variable parsing functions. + + @param[in] AuthFormat If true then indicates authenticated variables are supported + + @retval EFI_SUCCESS Initialized successfully + @retval Others An error occurred during initialization +**/ +EFI_STATUS +EFIAPI +InitVariableParsing ( + IN BOOLEAN AuthFormat + ) +{ + mAuthFormat = AuthFormat; + + return EFI_SUCCESS; +} -- 2.16.2.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#48239): https://edk2.groups.io/g/devel/message/48239 Mute This Topic: https://groups.io/mt/34318587/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-