From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=fail (domain: intel.com, ip: , mailfrom: michael.a.kubacki@intel.com) Received: from mga01.intel.com (mga01.intel.com []) by groups.io with SMTP; Fri, 27 Sep 2019 18:47:32 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 27 Sep 2019 18:47:31 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.64,557,1559545200"; d="scan'208";a="274005084" Received: from makuback-desk1.amr.corp.intel.com ([10.7.159.162]) by orsmga001.jf.intel.com with ESMTP; 27 Sep 2019 18:47:31 -0700 From: "Kubacki, Michael A" To: devel@edk2.groups.io Cc: Dandan Bi , Ard Biesheuvel , Eric Dong , Laszlo Ersek , Liming Gao , Michael D Kinney , Ray Ni , Jian J Wang , Hao A Wu , Jiewen Yao Subject: [PATCH V2 4/9] MdeModulePkg/Variable: Add local auth status in VariableParsing Date: Fri, 27 Sep 2019 18:47:12 -0700 Message-Id: <20190928014717.31372-5-michael.a.kubacki@intel.com> X-Mailer: git-send-email 2.16.2.windows.1 In-Reply-To: <20190928014717.31372-1-michael.a.kubacki@intel.com> References: <20190928014717.31372-1-michael.a.kubacki@intel.com> 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 Cc: Ard Biesheuvel Cc: Eric Dong Cc: Laszlo Ersek Cc: Liming Gao Cc: Michael D Kinney Cc: Ray Ni Cc: Jian J Wang Cc: Hao A Wu Cc: Jiewen Yao Signed-off-by: Michael Kubacki --- 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