From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=192.55.52.93; helo=mga11.intel.com; envelope-from=chao.b.zhang@intel.com; receiver=edk2-devel@lists.01.org Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id CF7D5210FBF1B for ; Thu, 14 Jun 2018 23:39:25 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 14 Jun 2018 23:39:24 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,225,1526367600"; d="scan'208";a="237645120" Received: from fmsmsx106.amr.corp.intel.com ([10.18.124.204]) by fmsmga006.fm.intel.com with ESMTP; 14 Jun 2018 23:39:24 -0700 Received: from FMSMSX110.amr.corp.intel.com (10.18.116.10) by FMSMSX106.amr.corp.intel.com (10.18.124.204) with Microsoft SMTP Server (TLS) id 14.3.319.2; Thu, 14 Jun 2018 23:39:24 -0700 Received: from shsmsx151.ccr.corp.intel.com (10.239.6.50) by fmsmsx110.amr.corp.intel.com (10.18.116.10) with Microsoft SMTP Server (TLS) id 14.3.319.2; Thu, 14 Jun 2018 23:39:22 -0700 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.223]) by SHSMSX151.ccr.corp.intel.com ([169.254.3.116]) with mapi id 14.03.0319.002; Fri, 15 Jun 2018 14:39:20 +0800 From: "Zhang, Chao B" To: "Chen, Chen A" , "edk2-devel@lists.01.org" CC: "Kinney, Michael D" , "Yao, Jiewen" Thread-Topic: [edk2] [PATCH 30/37] SecurityPkg: Removing ipf which is no longer supported from edk2. Thread-Index: AQHUAskN08SqHl57ukG1WIYr6ZmI/aRg4C7g Date: Fri, 15 Jun 2018 06:39:19 +0000 Message-ID: References: <20180613034544.3228-1-chen.a.chen@intel.com> In-Reply-To: <20180613034544.3228-1-chen.a.chen@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ctpclassification: CTP_NT x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiYTk3NDhjOGYtNmMxNy00ZjMwLThkYzUtY2E5NGJkYzA2MzBkIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiRE9FcmFvYU5qaHVuaE9vN25JWXZpclFCNU4za3IxZXpXT2Z1a1ZvcHFTbGZMVGdsRnE4WEZNSnk1UUppVjFSZiJ9 dlp-product: dlpe-windows dlp-version: 11.0.200.100 dlp-reaction: no-action x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH 30/37] SecurityPkg: Removing ipf which is no longer supported from edk2. X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 15 Jun 2018 06:39:26 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi ChenChen: Please update all the license header accordingly. Other SecurityPkg chan= ges are good to me. -----Original Message----- From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of chen= c2 Sent: Wednesday, June 13, 2018 11:46 AM To: edk2-devel@lists.01.org Cc: Kinney, Michael D ; Yao, Jiewen ; Zhang, Chao B Subject: [edk2] [PATCH 30/37] SecurityPkg: Removing ipf which is no longer = supported from edk2. Removing rules for Ipf sources file: * Remove the source file which path with "ipf" and also listed in [Sources.IPF] section of INF file. * Remove the source file which listed in [Components.IPF] section of DSC file and not listed in any other [Components] section. * Remove the embedded Ipf code for MDE_CPU_IPF. Removing rules for Inf file: * Remove IPF from VALID_ARCHITECTURES comments. * Remove DXE_SAL_DRIVER from LIBRARY_CLASS in [Defines] section. * Remove the INF which only listed in [Components.IPF] section in DSC. * Remove statements from [BuildOptions] that provide IPF specific flags. * Remove any IPF sepcific sections. Removing rules for Dec file: * Remove [Includes.IPF] section from Dec. Removing rules for Dsc file: * Remove IPF from SUPPORTED_ARCHITECTURES in [Defines] section of DSC. * Remove any IPF specific sections. * Remove statements from [BuildOptions] that provide IPF specific flags. Cc: Chao Zhang Cc: Jiewen Yao Cc: Michael D Kinney Signed-off-by: chenc2 Contributed-under: TianoCore Contribution Agreement 1.1 --- SecurityPkg/Hash2DxeCrypto/Hash2DxeCrypto.inf | 4 +- .../DxeImageAuthenticationStatusLib.inf | 4 +- .../DxeImageVerificationLib.inf | 4 +- .../DxeRsa2048Sha256GuidedSectionExtractLib.inf | 6 +- .../DxeTcg2PhysicalPresenceLib.inf | 4 +- .../DxeTcgPhysicalPresenceLib.inf | 4 +- .../DxeTpm2MeasureBootLib.inf | 4 +- .../DxeTpmMeasureBootLib/DxeTpmMeasureBootLib.inf | 4 +- .../DxeTpmMeasurementLib/DxeTpmMeasurementLib.inf | 4 +- .../FmpAuthenticationLibPkcs7.inf | 2 +- .../FmpAuthenticationLibRsa2048Sha256.inf | 2 +- .../HashInstanceLibSha1/HashInstanceLibSha1.inf | 2 +- .../HashInstanceLibSha256.inf | 2 +- .../HashLibBaseCryptoRouterDxe.inf | 4 +- .../HashLibBaseCryptoRouterPei.inf | 2 +- SecurityPkg/Library/HashLibTpm2/HashLibTpm2.inf | 2 +- .../PeiRsa2048Sha256GuidedSectionExtractLib.inf | 4 +- .../PeiTcg2PhysicalPresenceLib.inf | 4 +- .../PlatformSecureLibNull.inf | 2 +- .../SmmTcg2PhysicalPresenceLib.inf | 4 +- .../Tcg2PpVendorLibNull/Tcg2PpVendorLibNull.inf | 4 +- .../TcgPpVendorLibNull/TcgPpVendorLibNull.inf | 4 +- .../Library/Tpm12CommandLib/Tpm12CommandLib.inf | 2 +- .../Tpm12DeviceLibDTpm/Tpm12DeviceLibDTpm.inf | 4 +- .../Tpm12DeviceLibTcg/Tpm12DeviceLibTcg.inf | 4 +- .../Library/Tpm2CommandLib/Tpm2CommandLib.inf | 2 +- .../Tpm2DeviceLibDTpm/Tpm2DeviceLibDTpm.inf | 2 +- .../Tpm2DeviceLibDTpm/Tpm2InstanceLibDTpm.inf | 2 +- .../Tpm2DeviceLibRouter/Tpm2DeviceLibRouterDxe.inf | 4 +- .../Tpm2DeviceLibRouter/Tpm2DeviceLibRouterPei.inf | 4 +- .../Tpm2DeviceLibTcg2/Tpm2DeviceLibTcg2.inf | 4 +- SecurityPkg/Library/TpmCommLib/TpmCommLib.inf | 2 +- SecurityPkg/SecurityPkg.dsc | 16 +- SecurityPkg/Tcg/MemoryOverwriteControl/TcgMor.inf | 2 +- .../TcgMorLockSmm.inf | 2 +- .../Tcg/Opal/OpalPassword/OpalPasswordDxe.inf | 2 +- .../PhysicalPresencePei/PhysicalPresencePei.inf | 4 +- SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigDxe.inf | 2 +- SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigPei.inf | 2 +- SecurityPkg/Tcg/Tcg2Dxe/Tcg2Dxe.inf | 2 +- SecurityPkg/Tcg/Tcg2Pei/Tcg2Pei.inf | 2 +- SecurityPkg/Tcg/TcgConfigDxe/TcgConfigDxe.inf | 2 +- SecurityPkg/Tcg/TcgDxe/TcgDxe.inf | 4 +- SecurityPkg/Tcg/TcgPei/TcgPei.inf | 4 +- .../EsalVariableDxeSal/AuthService.c | 886 ------ .../EsalVariableDxeSal/AuthService.h | 151 - .../EsalVariableDxeSal/EsalVariableDxeSal.inf | 105 - .../EsalVariableDxeSal/InitVariable.c | 247 -- .../EsalVariableDxeSal/Reclaim.c | 262 -- .../EsalVariableDxeSal/Variable.c | 3257 ----------------= ---- .../EsalVariableDxeSal/Variable.h | 505 --- .../SecureBootConfigDxe/SecureBootConfigDxe.inf | 2 +- 52 files changed, 71 insertions(+), 5494 deletions(-) delete mode 100644 SecurityPkg/VariableAuthenticated/EsalVariableDxeSal/Au= thService.c delete mode 100644 SecurityPkg/VariableAuthenticated/EsalVariableDxeSal/Au= thService.h delete mode 100644 SecurityPkg/VariableAuthenticated/EsalVariableDxeSal/Es= alVariableDxeSal.inf delete mode 100644 SecurityPkg/VariableAuthenticated/EsalVariableDxeSal/In= itVariable.c delete mode 100644 SecurityPkg/VariableAuthenticated/EsalVariableDxeSal/Re= claim.c delete mode 100644 SecurityPkg/VariableAuthenticated/EsalVariableDxeSal/Va= riable.c delete mode 100644 SecurityPkg/VariableAuthenticated/EsalVariableDxeSal/Va= riable.h diff --git a/SecurityPkg/Hash2DxeCrypto/Hash2DxeCrypto.inf b/SecurityPkg/Ha= sh2DxeCrypto/Hash2DxeCrypto.inf index 557dedbbea..1fb568c071 100644 --- a/SecurityPkg/Hash2DxeCrypto/Hash2DxeCrypto.inf +++ b/SecurityPkg/Hash2DxeCrypto/Hash2DxeCrypto.inf @@ -27,7 +27,7 @@ # # The following information is for reference only and not required by the = build tools. # -# VALID_ARCHITECTURES =3D IA32 X64 IPF +# VALID_ARCHITECTURES =3D IA32 X64 # =20 [Sources.common] @@ -61,4 +61,4 @@ gEfiHash2ServiceBindingProtocolGuid ## PRODUCES =20 [UserExtensions.TianoCore."ExtraFiles"] - Hash2DxeCryptoExtra.uni \ No newline at end of file + Hash2DxeCryptoExtra.uni diff --git a/SecurityPkg/Library/DxeImageAuthenticationStatusLib/DxeImageAu= thenticationStatusLib.inf b/SecurityPkg/Library/DxeImageAuthenticationStatu= sLib/DxeImageAuthenticationStatusLib.inf index 62fcdaacc6..ba94aae885 100644 --- a/SecurityPkg/Library/DxeImageAuthenticationStatusLib/DxeImageAuthentic= ationStatusLib.inf +++ b/SecurityPkg/Library/DxeImageAuthenticationStatusLib/DxeImageAuthentic= ationStatusLib.inf @@ -20,13 +20,13 @@ FILE_GUID =3D EB92D1DE-7C36-4680-BB88-A67E96049F72 MODULE_TYPE =3D DXE_DRIVER VERSION_STRING =3D 1.0 - LIBRARY_CLASS =3D NULL|DXE_DRIVER DXE_RUNTIME_DRIVER DX= E_SAL_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER=20 + LIBRARY_CLASS =3D NULL|DXE_DRIVER DXE_RUNTIME_DRIVER DX= E_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER CONSTRUCTOR =3D DxeImageAuthenticationStatusLibConstr= uctor =20 # # The following information is for reference only and not required by the = build tools. # -# VALID_ARCHITECTURES =3D IA32 X64 IPF EBC +# VALID_ARCHITECTURES =3D IA32 X64 EBC # =20 [Sources] diff --git a/SecurityPkg/Library/DxeImageVerificationLib/DxeImageVerificati= onLib.inf b/SecurityPkg/Library/DxeImageVerificationLib/DxeImageVerificatio= nLib.inf index 3430b6ea9d..e50c0b9979 100644 --- a/SecurityPkg/Library/DxeImageVerificationLib/DxeImageVerificationLib.i= nf +++ b/SecurityPkg/Library/DxeImageVerificationLib/DxeImageVerificationLib.i= nf @@ -25,13 +25,13 @@ FILE_GUID =3D 0CA970E1-43FA-4402-BC0A-81AF336BFFD6 MODULE_TYPE =3D DXE_DRIVER VERSION_STRING =3D 1.0 - LIBRARY_CLASS =3D NULL|DXE_DRIVER DXE_RUNTIME_DRIVER DX= E_SAL_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER + LIBRARY_CLASS =3D NULL|DXE_DRIVER DXE_RUNTIME_DRIVER DX= E_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER CONSTRUCTOR =3D DxeImageVerificationLibConstructor =20 # # The following information is for reference only and not required by the = build tools. # -# VALID_ARCHITECTURES =3D IA32 X64 IPF EBC +# VALID_ARCHITECTURES =3D IA32 X64 EBC # =20 [Sources] diff --git a/SecurityPkg/Library/DxeRsa2048Sha256GuidedSectionExtractLib/Dx= eRsa2048Sha256GuidedSectionExtractLib.inf b/SecurityPkg/Library/DxeRsa2048S= ha256GuidedSectionExtractLib/DxeRsa2048Sha256GuidedSectionExtractLib.inf index 4681f08643..023004ff40 100644 --- a/SecurityPkg/Library/DxeRsa2048Sha256GuidedSectionExtractLib/DxeRsa204= 8Sha256GuidedSectionExtractLib.inf +++ b/SecurityPkg/Library/DxeRsa2048Sha256GuidedSectionExtractLib/DxeRsa204= 8Sha256GuidedSectionExtractLib.inf @@ -22,14 +22,14 @@ FILE_GUID =3D 0AD6C423-4732-4cf3-9CE3-0A5416D634A5 MODULE_TYPE =3D DXE_DRIVER VERSION_STRING =3D 1.0 - LIBRARY_CLASS =3D NULL|DXE_CORE DXE_DRIVER DXE_RUNTIME_= DRIVER DXE_SAL_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER + LIBRARY_CLASS =3D NULL|DXE_CORE DXE_DRIVER DXE_RUNTIME_= DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER CONSTRUCTOR =3D DxeRsa2048Sha256GuidedSectionExtractL= ibConstructor MODULE_UNI_FILE =3D DxeRsa2048Sha256GuidedSectionExtractL= ib.uni =20 # # The following information is for reference only and not required by the = build tools. # -# VALID_ARCHITECTURES =3D IA32 X64 IPF +# VALID_ARCHITECTURES =3D IA32 X64 # =20 [Sources] @@ -59,4 +59,4 @@ [Guids] gEfiCertTypeRsa2048Sha256Guid ## PRODUCES ## UNDEFINED # Specifi= es RSA 2048 SHA 256 authentication algorithm. gEfiHashAlgorithmSha256Guid ## SOMETIMES_CONSUMES ## UNDEFINED - =20 \ No newline at end of file + diff --git a/SecurityPkg/Library/DxeTcg2PhysicalPresenceLib/DxeTcg2Physical= PresenceLib.inf b/SecurityPkg/Library/DxeTcg2PhysicalPresenceLib/DxeTcg2Phy= sicalPresenceLib.inf index fc10129989..52edd5c645 100644 --- a/SecurityPkg/Library/DxeTcg2PhysicalPresenceLib/DxeTcg2PhysicalPresenc= eLib.inf +++ b/SecurityPkg/Library/DxeTcg2PhysicalPresenceLib/DxeTcg2PhysicalPresenc= eLib.inf @@ -25,12 +25,12 @@ FILE_GUID =3D 7E507A86-DE8B-4AD3-BC4C-0498389098D3 MODULE_TYPE =3D DXE_DRIVER VERSION_STRING =3D 1.0 - LIBRARY_CLASS =3D Tcg2PhysicalPresenceLib|DXE_DRIVER DX= E_RUNTIME_DRIVER DXE_SAL_DRIVER UEFI_APPLICATION UEFI_DRIVER=20 + LIBRARY_CLASS =3D Tcg2PhysicalPresenceLib|DXE_DRIVER DX= E_RUNTIME_DRIVER UEFI_APPLICATION UEFI_DRIVER =20 # # The following information is for reference only and not required by the = build tools. # -# VALID_ARCHITECTURES =3D IA32 X64 IPF EBC +# VALID_ARCHITECTURES =3D IA32 X64 EBC # =20 [Sources] diff --git a/SecurityPkg/Library/DxeTcgPhysicalPresenceLib/DxeTcgPhysicalPr= esenceLib.inf b/SecurityPkg/Library/DxeTcgPhysicalPresenceLib/DxeTcgPhysica= lPresenceLib.inf index 3aacba5c2b..98c873bbc5 100644 --- a/SecurityPkg/Library/DxeTcgPhysicalPresenceLib/DxeTcgPhysicalPresenceL= ib.inf +++ b/SecurityPkg/Library/DxeTcgPhysicalPresenceLib/DxeTcgPhysicalPresenceL= ib.inf @@ -26,13 +26,13 @@ FILE_GUID =3D EBC43A46-34AC-4F07-A7F5-A5394619361C MODULE_TYPE =3D DXE_DRIVER VERSION_STRING =3D 1.0 - LIBRARY_CLASS =3D TcgPhysicalPresenceLib|DXE_DRIVER DXE= _RUNTIME_DRIVER DXE_SAL_DRIVER UEFI_APPLICATION UEFI_DRIVER=20 + LIBRARY_CLASS =3D TcgPhysicalPresenceLib|DXE_DRIVER DXE= _RUNTIME_DRIVER UEFI_APPLICATION UEFI_DRIVER CONSTRUCTOR =3D TcgPhysicalPresenceLibConstructor =20 # # The following information is for reference only and not required by the = build tools. # -# VALID_ARCHITECTURES =3D IA32 X64 IPF EBC +# VALID_ARCHITECTURES =3D IA32 X64 EBC # =20 [Sources] diff --git a/SecurityPkg/Library/DxeTpm2MeasureBootLib/DxeTpm2MeasureBootLi= b.inf b/SecurityPkg/Library/DxeTpm2MeasureBootLib/DxeTpm2MeasureBootLib.inf index 939f6fb19b..7758bf8f29 100644 --- a/SecurityPkg/Library/DxeTpm2MeasureBootLib/DxeTpm2MeasureBootLib.inf +++ b/SecurityPkg/Library/DxeTpm2MeasureBootLib/DxeTpm2MeasureBootLib.inf @@ -29,13 +29,13 @@ FILE_GUID =3D 778CE4F4-36BD-4ae7-B8F0-10B420B0D174 MODULE_TYPE =3D DXE_DRIVER VERSION_STRING =3D 1.0 - LIBRARY_CLASS =3D NULL|DXE_DRIVER DXE_RUNTIME_DRIVER DX= E_SAL_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER=20 + LIBRARY_CLASS =3D NULL|DXE_DRIVER DXE_RUNTIME_DRIVER DX= E_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER CONSTRUCTOR =3D DxeTpm2MeasureBootLibConstructor =20 # # The following information is for reference only and not required by the = build tools. # -# VALID_ARCHITECTURES =3D IA32 X64 IPF EBC +# VALID_ARCHITECTURES =3D IA32 X64 EBC # =20 [Sources] diff --git a/SecurityPkg/Library/DxeTpmMeasureBootLib/DxeTpmMeasureBootLib.= inf b/SecurityPkg/Library/DxeTpmMeasureBootLib/DxeTpmMeasureBootLib.inf index 553e68321e..2547b44e6d 100644 --- a/SecurityPkg/Library/DxeTpmMeasureBootLib/DxeTpmMeasureBootLib.inf +++ b/SecurityPkg/Library/DxeTpmMeasureBootLib/DxeTpmMeasureBootLib.inf @@ -26,13 +26,13 @@ FILE_GUID =3D 6C60C7D0-922A-4b7c-87D7-E503EDD73BBF MODULE_TYPE =3D DXE_DRIVER VERSION_STRING =3D 1.0 - LIBRARY_CLASS =3D NULL|DXE_DRIVER DXE_RUNTIME_DRIVER DX= E_SAL_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER=20 + LIBRARY_CLASS =3D NULL|DXE_DRIVER DXE_RUNTIME_DRIVER DX= E_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER CONSTRUCTOR =3D DxeTpmMeasureBootLibConstructor =20 # # The following information is for reference only and not required by the = build tools. # -# VALID_ARCHITECTURES =3D IA32 X64 IPF EBC +# VALID_ARCHITECTURES =3D IA32 X64 EBC # =20 [Sources] diff --git a/SecurityPkg/Library/DxeTpmMeasurementLib/DxeTpmMeasurementLib.= inf b/SecurityPkg/Library/DxeTpmMeasurementLib/DxeTpmMeasurementLib.inf index 410eb788db..72630ef785 100644 --- a/SecurityPkg/Library/DxeTpmMeasurementLib/DxeTpmMeasurementLib.inf +++ b/SecurityPkg/Library/DxeTpmMeasurementLib/DxeTpmMeasurementLib.inf @@ -20,13 +20,13 @@ FILE_GUID =3D 30930D10-AF5B-4abf-80E6-EB4FFC0AE9D1 MODULE_TYPE =3D UEFI_DRIVER VERSION_STRING =3D 1.0 - LIBRARY_CLASS =3D TpmMeasurementLib|DXE_DRIVER DXE_RUNT= IME_DRIVER DXE_SAL_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER=20 + LIBRARY_CLASS =3D TpmMeasurementLib|DXE_DRIVER DXE_RUNT= IME_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER MODULE_UNI_FILE =3D DxeTpmMeasurementLib.uni =20 # # The following information is for reference only and not required by the = build tools. # -# VALID_ARCHITECTURES =3D IA32 X64 IPF +# VALID_ARCHITECTURES =3D IA32 X64 # =20 [Sources] diff --git a/SecurityPkg/Library/FmpAuthenticationLibPkcs7/FmpAuthenticatio= nLibPkcs7.inf b/SecurityPkg/Library/FmpAuthenticationLibPkcs7/FmpAuthentica= tionLibPkcs7.inf index 215b3cbecd..8c41b8266a 100644 --- a/SecurityPkg/Library/FmpAuthenticationLibPkcs7/FmpAuthenticationLibPkc= s7.inf +++ b/SecurityPkg/Library/FmpAuthenticationLibPkcs7/FmpAuthenticationLibPkc= s7.inf @@ -26,7 +26,7 @@ # # The following information is for reference only and not required by the = build tools. # -# VALID_ARCHITECTURES =3D IA32 X64 IPF EBC +# VALID_ARCHITECTURES =3D IA32 X64 EBC # =20 [Sources] diff --git a/SecurityPkg/Library/FmpAuthenticationLibRsa2048Sha256/FmpAuthe= nticationLibRsa2048Sha256.inf b/SecurityPkg/Library/FmpAuthenticationLibRsa= 2048Sha256/FmpAuthenticationLibRsa2048Sha256.inf index cdd22429c2..8633319e56 100644 --- a/SecurityPkg/Library/FmpAuthenticationLibRsa2048Sha256/FmpAuthenticati= onLibRsa2048Sha256.inf +++ b/SecurityPkg/Library/FmpAuthenticationLibRsa2048Sha256/FmpAuthenticati= onLibRsa2048Sha256.inf @@ -26,7 +26,7 @@ # # The following information is for reference only and not required by the = build tools. # -# VALID_ARCHITECTURES =3D IA32 X64 IPF EBC +# VALID_ARCHITECTURES =3D IA32 X64 EBC # =20 [Sources] diff --git a/SecurityPkg/Library/HashInstanceLibSha1/HashInstanceLibSha1.in= f b/SecurityPkg/Library/HashInstanceLibSha1/HashInstanceLibSha1.inf index 588c5f1ac4..5152aab5b5 100644 --- a/SecurityPkg/Library/HashInstanceLibSha1/HashInstanceLibSha1.inf +++ b/SecurityPkg/Library/HashInstanceLibSha1/HashInstanceLibSha1.inf @@ -26,7 +26,7 @@ # # The following information is for reference only and not required by the = build tools. # -# VALID_ARCHITECTURES =3D IA32 X64 IPF +# VALID_ARCHITECTURES =3D IA32 X64 # =20 [Sources] diff --git a/SecurityPkg/Library/HashInstanceLibSha256/HashInstanceLibSha25= 6.inf b/SecurityPkg/Library/HashInstanceLibSha256/HashInstanceLibSha256.inf index a4b2ccf9e2..12092adc19 100644 --- a/SecurityPkg/Library/HashInstanceLibSha256/HashInstanceLibSha256.inf +++ b/SecurityPkg/Library/HashInstanceLibSha256/HashInstanceLibSha256.inf @@ -26,7 +26,7 @@ # # The following information is for reference only and not required by the = build tools. # -# VALID_ARCHITECTURES =3D IA32 X64 IPF +# VALID_ARCHITECTURES =3D IA32 X64 # =20 [Sources] diff --git a/SecurityPkg/Library/HashLibBaseCryptoRouter/HashLibBaseCryptoR= outerDxe.inf b/SecurityPkg/Library/HashLibBaseCryptoRouter/HashLibBaseCrypt= oRouterDxe.inf index 6e660d4f14..de76f4b64e 100644 --- a/SecurityPkg/Library/HashLibBaseCryptoRouter/HashLibBaseCryptoRouterDx= e.inf +++ b/SecurityPkg/Library/HashLibBaseCryptoRouter/HashLibBaseCryptoRouterDx= e.inf @@ -22,13 +22,13 @@ FILE_GUID =3D 158DC712-F15A-44dc-93BB-1675045BE066 MODULE_TYPE =3D DXE_DRIVER VERSION_STRING =3D 1.0 - LIBRARY_CLASS =3D HashLib|DXE_DRIVER DXE_RUNTIME_DRIVER= DXE_SAL_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER=20 + LIBRARY_CLASS =3D HashLib|DXE_DRIVER DXE_RUNTIME_DRIVER= DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER CONSTRUCTOR =3D HashLibBaseCryptoRouterDxeConstructor =20 # # The following information is for reference only and not required by the = build tools. # -# VALID_ARCHITECTURES =3D IA32 X64 IPF +# VALID_ARCHITECTURES =3D IA32 X64 # =20 [Sources] diff --git a/SecurityPkg/Library/HashLibBaseCryptoRouter/HashLibBaseCryptoR= outerPei.inf b/SecurityPkg/Library/HashLibBaseCryptoRouter/HashLibBaseCrypt= oRouterPei.inf index 018090b8fa..fb97a1f746 100644 --- a/SecurityPkg/Library/HashLibBaseCryptoRouter/HashLibBaseCryptoRouterPe= i.inf +++ b/SecurityPkg/Library/HashLibBaseCryptoRouter/HashLibBaseCryptoRouterPe= i.inf @@ -28,7 +28,7 @@ # # The following information is for reference only and not required by the = build tools. # -# VALID_ARCHITECTURES =3D IA32 X64 IPF +# VALID_ARCHITECTURES =3D IA32 X64 # =20 [Sources] diff --git a/SecurityPkg/Library/HashLibTpm2/HashLibTpm2.inf b/SecurityPkg/= Library/HashLibTpm2/HashLibTpm2.inf index f807cc7f3d..257ae5c305 100644 --- a/SecurityPkg/Library/HashLibTpm2/HashLibTpm2.inf +++ b/SecurityPkg/Library/HashLibTpm2/HashLibTpm2.inf @@ -26,7 +26,7 @@ # # The following information is for reference only and not required by the = build tools. # -# VALID_ARCHITECTURES =3D IA32 X64 IPF +# VALID_ARCHITECTURES =3D IA32 X64 # =20 [Sources] diff --git a/SecurityPkg/Library/PeiRsa2048Sha256GuidedSectionExtractLib/Pe= iRsa2048Sha256GuidedSectionExtractLib.inf b/SecurityPkg/Library/PeiRsa2048S= ha256GuidedSectionExtractLib/PeiRsa2048Sha256GuidedSectionExtractLib.inf index 3b781c71c7..70f2a60828 100644 --- a/SecurityPkg/Library/PeiRsa2048Sha256GuidedSectionExtractLib/PeiRsa204= 8Sha256GuidedSectionExtractLib.inf +++ b/SecurityPkg/Library/PeiRsa2048Sha256GuidedSectionExtractLib/PeiRsa204= 8Sha256GuidedSectionExtractLib.inf @@ -29,7 +29,7 @@ # # The following information is for reference only and not required by the = build tools. # -# VALID_ARCHITECTURES =3D IA32 X64 IPF +# VALID_ARCHITECTURES =3D IA32 X64 # =20 [Sources] @@ -55,4 +55,4 @@ [Guids] gEfiCertTypeRsa2048Sha256Guid ## PRODUCES ## UNDEFINED # Specifies= RSA 2048 SHA 256 authentication algorithm. gEfiHashAlgorithmSha256Guid ## SOMETIMES_CONSUMES ## UNDEFINED - =20 \ No newline at end of file + diff --git a/SecurityPkg/Library/PeiTcg2PhysicalPresenceLib/PeiTcg2Physical= PresenceLib.inf b/SecurityPkg/Library/PeiTcg2PhysicalPresenceLib/PeiTcg2Phy= sicalPresenceLib.inf index 6d0b7a00cb..2dd663a3b9 100644 --- a/SecurityPkg/Library/PeiTcg2PhysicalPresenceLib/PeiTcg2PhysicalPresenc= eLib.inf +++ b/SecurityPkg/Library/PeiTcg2PhysicalPresenceLib/PeiTcg2PhysicalPresenc= eLib.inf @@ -25,7 +25,7 @@ # # The following information is for reference only and not required by the = build tools. # -# VALID_ARCHITECTURES =3D IA32 X64 IPF EBC +# VALID_ARCHITECTURES =3D IA32 X64 EBC # =20 [Sources] @@ -49,4 +49,4 @@ gEfiPeiReadOnlyVariable2PpiGuid ## CONSUMES =20 [Depex] - gEfiPeiReadOnlyVariable2PpiGuid \ No newline at end of file + gEfiPeiReadOnlyVariable2PpiGuid diff --git a/SecurityPkg/Library/PlatformSecureLibNull/PlatformSecureLibNul= l.inf b/SecurityPkg/Library/PlatformSecureLibNull/PlatformSecureLibNull.inf index be415f4166..c653426971 100644 --- a/SecurityPkg/Library/PlatformSecureLibNull/PlatformSecureLibNull.inf +++ b/SecurityPkg/Library/PlatformSecureLibNull/PlatformSecureLibNull.inf @@ -29,7 +29,7 @@ # # The following information is for reference only and not required by the = build tools. # -# VALID_ARCHITECTURES =3D IA32 X64 IPF EBC +# VALID_ARCHITECTURES =3D IA32 X64 EBC # =20 [Sources] diff --git a/SecurityPkg/Library/SmmTcg2PhysicalPresenceLib/SmmTcg2Physical= PresenceLib.inf b/SecurityPkg/Library/SmmTcg2PhysicalPresenceLib/SmmTcg2Phy= sicalPresenceLib.inf index 83670971c9..acbc357256 100644 --- a/SecurityPkg/Library/SmmTcg2PhysicalPresenceLib/SmmTcg2PhysicalPresenc= eLib.inf +++ b/SecurityPkg/Library/SmmTcg2PhysicalPresenceLib/SmmTcg2PhysicalPresenc= eLib.inf @@ -30,7 +30,7 @@ # # The following information is for reference only and not required by the = build tools. # -# VALID_ARCHITECTURES =3D IA32 X64 IPF EBC +# VALID_ARCHITECTURES =3D IA32 X64 EBC # =20 [Sources] @@ -57,4 +57,4 @@ gEfiSecurityPkgTokenSpaceGuid.PcdTcgPhysicalPresenceInterfaceVer ## CON= SUMES =20 [Depex] - gEfiSmmVariableProtocolGuid \ No newline at end of file + gEfiSmmVariableProtocolGuid diff --git a/SecurityPkg/Library/Tcg2PpVendorLibNull/Tcg2PpVendorLibNull.in= f b/SecurityPkg/Library/Tcg2PpVendorLibNull/Tcg2PpVendorLibNull.inf index f953fe95a7..7a54c6f9cb 100644 --- a/SecurityPkg/Library/Tcg2PpVendorLibNull/Tcg2PpVendorLibNull.inf +++ b/SecurityPkg/Library/Tcg2PpVendorLibNull/Tcg2PpVendorLibNull.inf @@ -23,7 +23,7 @@ # # The following information is for reference only and not required by the = build tools. # -# VALID_ARCHITECTURES =3D IA32 X64 IPF EBC +# VALID_ARCHITECTURES =3D IA32 X64 EBC # =20 [Sources] @@ -34,4 +34,4 @@ SecurityPkg/SecurityPkg.dec =20 [LibraryClasses] - DebugLib \ No newline at end of file + DebugLib diff --git a/SecurityPkg/Library/TcgPpVendorLibNull/TcgPpVendorLibNull.inf = b/SecurityPkg/Library/TcgPpVendorLibNull/TcgPpVendorLibNull.inf index 9674386abd..e2e229df9f 100644 --- a/SecurityPkg/Library/TcgPpVendorLibNull/TcgPpVendorLibNull.inf +++ b/SecurityPkg/Library/TcgPpVendorLibNull/TcgPpVendorLibNull.inf @@ -23,7 +23,7 @@ # # The following information is for reference only and not required by the = build tools. # -# VALID_ARCHITECTURES =3D IA32 X64 IPF EBC +# VALID_ARCHITECTURES =3D IA32 X64 EBC # =20 [Sources] @@ -34,4 +34,4 @@ SecurityPkg/SecurityPkg.dec =20 [LibraryClasses] - DebugLib \ No newline at end of file + DebugLib diff --git a/SecurityPkg/Library/Tpm12CommandLib/Tpm12CommandLib.inf b/Secu= rityPkg/Library/Tpm12CommandLib/Tpm12CommandLib.inf index f5dbb721b8..aad6e57da6 100644 --- a/SecurityPkg/Library/Tpm12CommandLib/Tpm12CommandLib.inf +++ b/SecurityPkg/Library/Tpm12CommandLib/Tpm12CommandLib.inf @@ -25,7 +25,7 @@ # # The following information is for reference only and not required by the = build tools. # -# VALID_ARCHITECTURES =3D IA32 X64 IPF +# VALID_ARCHITECTURES =3D IA32 X64 # =20 [Sources] diff --git a/SecurityPkg/Library/Tpm12DeviceLibDTpm/Tpm12DeviceLibDTpm.inf = b/SecurityPkg/Library/Tpm12DeviceLibDTpm/Tpm12DeviceLibDTpm.inf index 30b399499e..301984ce08 100644 --- a/SecurityPkg/Library/Tpm12DeviceLibDTpm/Tpm12DeviceLibDTpm.inf +++ b/SecurityPkg/Library/Tpm12DeviceLibDTpm/Tpm12DeviceLibDTpm.inf @@ -27,7 +27,7 @@ # # The following information is for reference only and not required by the = build tools. # -# VALID_ARCHITECTURES =3D IA32 X64 IPF +# VALID_ARCHITECTURES =3D IA32 X64 # =20 [Sources] @@ -45,4 +45,4 @@ DebugLib =20 [Pcd] - gEfiSecurityPkgTokenSpaceGuid.PcdTpmBaseAddress ## CONSUME= S \ No newline at end of file + gEfiSecurityPkgTokenSpaceGuid.PcdTpmBaseAddress ## CONSUME= S diff --git a/SecurityPkg/Library/Tpm12DeviceLibTcg/Tpm12DeviceLibTcg.inf b/= SecurityPkg/Library/Tpm12DeviceLibTcg/Tpm12DeviceLibTcg.inf index 76ea4924a4..78d710030a 100644 --- a/SecurityPkg/Library/Tpm12DeviceLibTcg/Tpm12DeviceLibTcg.inf +++ b/SecurityPkg/Library/Tpm12DeviceLibTcg/Tpm12DeviceLibTcg.inf @@ -21,12 +21,12 @@ FILE_GUID =3D 4D8B77D9-E923-48f8-B070-4053D78B7E56 MODULE_TYPE =3D BASE VERSION_STRING =3D 1.0 - LIBRARY_CLASS =3D Tpm12DeviceLib|DXE_DRIVER DXE_RUNTIME= _DRIVER DXE_SAL_DRIVER UEFI_APPLICATION UEFI_DRIVER=20 + LIBRARY_CLASS =3D Tpm12DeviceLib|DXE_DRIVER DXE_RUNTIME= _DRIVER UEFI_APPLICATION UEFI_DRIVER =20 # # The following information is for reference only and not required by the = build tools. # -# VALID_ARCHITECTURES =3D IA32 X64 IPF +# VALID_ARCHITECTURES =3D IA32 X64 # =20 [Sources] diff --git a/SecurityPkg/Library/Tpm2CommandLib/Tpm2CommandLib.inf b/Securi= tyPkg/Library/Tpm2CommandLib/Tpm2CommandLib.inf index 481a878671..d0138a812f 100644 --- a/SecurityPkg/Library/Tpm2CommandLib/Tpm2CommandLib.inf +++ b/SecurityPkg/Library/Tpm2CommandLib/Tpm2CommandLib.inf @@ -25,7 +25,7 @@ # # The following information is for reference only and not required by the = build tools. # -# VALID_ARCHITECTURES =3D IA32 X64 IPF +# VALID_ARCHITECTURES =3D IA32 X64 # =20 [Sources] diff --git a/SecurityPkg/Library/Tpm2DeviceLibDTpm/Tpm2DeviceLibDTpm.inf b/= SecurityPkg/Library/Tpm2DeviceLibDTpm/Tpm2DeviceLibDTpm.inf index 3e619b98b7..1c73e335d4 100644 --- a/SecurityPkg/Library/Tpm2DeviceLibDTpm/Tpm2DeviceLibDTpm.inf +++ b/SecurityPkg/Library/Tpm2DeviceLibDTpm/Tpm2DeviceLibDTpm.inf @@ -32,7 +32,7 @@ # # The following information is for reference only and not required by the = build tools. # -# VALID_ARCHITECTURES =3D IA32 X64 IPF +# VALID_ARCHITECTURES =3D IA32 X64 # =20 [Sources] diff --git a/SecurityPkg/Library/Tpm2DeviceLibDTpm/Tpm2InstanceLibDTpm.inf = b/SecurityPkg/Library/Tpm2DeviceLibDTpm/Tpm2InstanceLibDTpm.inf index 22efb1ef4c..56ed69f363 100644 --- a/SecurityPkg/Library/Tpm2DeviceLibDTpm/Tpm2InstanceLibDTpm.inf +++ b/SecurityPkg/Library/Tpm2DeviceLibDTpm/Tpm2InstanceLibDTpm.inf @@ -28,7 +28,7 @@ # # The following information is for reference only and not required by the = build tools. # -# VALID_ARCHITECTURES =3D IA32 X64 IPF +# VALID_ARCHITECTURES =3D IA32 X64 # =20 [Sources] diff --git a/SecurityPkg/Library/Tpm2DeviceLibRouter/Tpm2DeviceLibRouterDxe= .inf b/SecurityPkg/Library/Tpm2DeviceLibRouter/Tpm2DeviceLibRouterDxe.inf index 28f381c7be..5a3adb0638 100644 --- a/SecurityPkg/Library/Tpm2DeviceLibRouter/Tpm2DeviceLibRouterDxe.inf +++ b/SecurityPkg/Library/Tpm2DeviceLibRouter/Tpm2DeviceLibRouterDxe.inf @@ -22,12 +22,12 @@ FILE_GUID =3D C3D69D87-5200-4aab-A6DB-2569BA1A92FC MODULE_TYPE =3D DXE_DRIVER VERSION_STRING =3D 1.0 - LIBRARY_CLASS =3D Tpm2DeviceLib|DXE_DRIVER DXE_RUNTIME_= DRIVER DXE_SAL_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER=20 + LIBRARY_CLASS =3D Tpm2DeviceLib|DXE_DRIVER DXE_RUNTIME_= DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER =20 # # The following information is for reference only and not required by the = build tools. # -# VALID_ARCHITECTURES =3D IA32 X64 IPF +# VALID_ARCHITECTURES =3D IA32 X64 # =20 [Sources] diff --git a/SecurityPkg/Library/Tpm2DeviceLibRouter/Tpm2DeviceLibRouterPei= .inf b/SecurityPkg/Library/Tpm2DeviceLibRouter/Tpm2DeviceLibRouterPei.inf index 2eca146dd2..6dee67bb31 100644 --- a/SecurityPkg/Library/Tpm2DeviceLibRouter/Tpm2DeviceLibRouterPei.inf +++ b/SecurityPkg/Library/Tpm2DeviceLibRouter/Tpm2DeviceLibRouterPei.inf @@ -27,7 +27,7 @@ # # The following information is for reference only and not required by the = build tools. # -# VALID_ARCHITECTURES =3D IA32 X64 IPF +# VALID_ARCHITECTURES =3D IA32 X64 # =20 [Sources] @@ -46,4 +46,4 @@ =20 [Pcd] gEfiSecurityPkgTokenSpaceGuid.PcdTpmInstanceGuid ## CONSUMES - =20 \ No newline at end of file + diff --git a/SecurityPkg/Library/Tpm2DeviceLibTcg2/Tpm2DeviceLibTcg2.inf b/= SecurityPkg/Library/Tpm2DeviceLibTcg2/Tpm2DeviceLibTcg2.inf index 6d95ebdd50..2458ada95b 100644 --- a/SecurityPkg/Library/Tpm2DeviceLibTcg2/Tpm2DeviceLibTcg2.inf +++ b/SecurityPkg/Library/Tpm2DeviceLibTcg2/Tpm2DeviceLibTcg2.inf @@ -21,12 +21,12 @@ FILE_GUID =3D A1B0B230-67DC-431E-A94A-A96AF1EBE637 MODULE_TYPE =3D DXE_DRIVER VERSION_STRING =3D 1.0 - LIBRARY_CLASS =3D Tpm2DeviceLib|DXE_DRIVER DXE_RUNTIME_= DRIVER DXE_SAL_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER=20 + LIBRARY_CLASS =3D Tpm2DeviceLib|DXE_DRIVER DXE_RUNTIME_= DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER =20 # # The following information is for reference only and not required by the = build tools. # -# VALID_ARCHITECTURES =3D IA32 X64 IPF +# VALID_ARCHITECTURES =3D IA32 X64 # =20 [Sources] diff --git a/SecurityPkg/Library/TpmCommLib/TpmCommLib.inf b/SecurityPkg/Li= brary/TpmCommLib/TpmCommLib.inf index 7f05f59711..fe4d9c6dd4 100644 --- a/SecurityPkg/Library/TpmCommLib/TpmCommLib.inf +++ b/SecurityPkg/Library/TpmCommLib/TpmCommLib.inf @@ -26,7 +26,7 @@ # # The following information is for reference only and not required by the = build tools. # -# VALID_ARCHITECTURES =3D IA32 X64 IPF +# VALID_ARCHITECTURES =3D IA32 X64 # =20 [Sources] diff --git a/SecurityPkg/SecurityPkg.dsc b/SecurityPkg/SecurityPkg.dsc index 9f1a91e5a9..12994439f0 100644 --- a/SecurityPkg/SecurityPkg.dsc +++ b/SecurityPkg/SecurityPkg.dsc @@ -19,7 +19,7 @@ PLATFORM_VERSION =3D 0.98 DSC_SPECIFICATION =3D 0x00010005 OUTPUT_DIRECTORY =3D Build/SecurityPkg - SUPPORTED_ARCHITECTURES =3D IA32|IPF|X64|EBC|ARM|AARCH64 + SUPPORTED_ARCHITECTURES =3D IA32|X64|EBC|ARM|AARCH64 BUILD_TARGETS =3D DEBUG|RELEASE|NOOPT SKUID_IDENTIFIER =3D DEFAULT =20 @@ -116,13 +116,6 @@ Tpm12DeviceLib|SecurityPkg/Library/Tpm12DeviceLibTcg/Tpm12DeviceLibTcg.i= nf Tpm2DeviceLib|SecurityPkg/Library/Tpm2DeviceLibTcg2/Tpm2DeviceLibTcg2.in= f =20 -[LibraryClasses.IPF.DXE_SAL_DRIVER] - ExtendedSalLib|MdePkg/Library/DxeRuntimeExtendedSalLib/DxeRuntimeExtende= dSalLib.inf - BaseCryptLib|CryptoPkg/Library/BaseCryptLibRuntimeCryptProtocol/BaseCryp= tLibRuntimeCryptProtocol.inf - HashLib|SecurityPkg/Library/HashLibBaseCryptoRouter/HashLibBaseCryptoRou= terDxe.inf - Tpm12DeviceLib|SecurityPkg/Library/Tpm12DeviceLibTcg/Tpm12DeviceLibTcg.i= nf - Tpm2DeviceLib|SecurityPkg/Library/Tpm2DeviceLibTcg2/Tpm2DeviceLibTcg2.in= f - [LibraryClasses.common.DXE_SMM_DRIVER] HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf SmmServicesTableLib|MdePkg/Library/SmmServicesTableLib/SmmServicesTableL= ib.inf @@ -203,10 +196,10 @@ SecurityPkg/Library/FmpAuthenticationLibPkcs7/FmpAuthenticationLibPkcs7.= inf SecurityPkg/Library/FmpAuthenticationLibRsa2048Sha256/FmpAuthenticationL= ibRsa2048Sha256.inf =20 -[Components.IA32, Components.X64, Components.IPF, Components.ARM, Componen= ts.AARCH64] +[Components.IA32, Components.X64, Components.ARM, Components.AARCH64] SecurityPkg/Library/AuthVariableLib/AuthVariableLib.inf =20 -[Components.IA32, Components.X64, Components.IPF] +[Components.IA32, Components.X64] # SecurityPkg/UserIdentification/PwdCredentialProviderDxe/PwdCredentialPr= oviderDxe.inf # SecurityPkg/UserIdentification/UsbCredentialProviderDxe/UsbCredentialPr= oviderDxe.inf SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootConfigDx= e.inf @@ -281,9 +274,6 @@ SecurityPkg/Tcg/Opal/OpalPassword/OpalPasswordDxe.inf SecurityPkg/Tcg/Opal/OpalPassword/OpalPasswordPei.inf =20 -[Components.IPF] - SecurityPkg/VariableAuthenticated/EsalVariableDxeSal/EsalVariableDxeSal.= inf - [BuildOptions] MSFT:*_*_IA32_DLINK_FLAGS =3D /ALIGN:256 INTEL:*_*_IA32_DLINK_FLAGS =3D /ALIGN:256 diff --git a/SecurityPkg/Tcg/MemoryOverwriteControl/TcgMor.inf b/SecurityPk= g/Tcg/MemoryOverwriteControl/TcgMor.inf index a131342bb6..3266450901 100644 --- a/SecurityPkg/Tcg/MemoryOverwriteControl/TcgMor.inf +++ b/SecurityPkg/Tcg/MemoryOverwriteControl/TcgMor.inf @@ -28,7 +28,7 @@ # # The following information is for reference only and not required by the = build tools. # -# VALID_ARCHITECTURES =3D IA32 X64 IPF EBC +# VALID_ARCHITECTURES =3D IA32 X64 EBC # =20 [Sources] diff --git a/SecurityPkg/Tcg/MemoryOverwriteRequestControlLock/TcgMorLockSm= m.inf b/SecurityPkg/Tcg/MemoryOverwriteRequestControlLock/TcgMorLockSmm.inf index 1623bd03bb..607e0730af 100644 --- a/SecurityPkg/Tcg/MemoryOverwriteRequestControlLock/TcgMorLockSmm.inf +++ b/SecurityPkg/Tcg/MemoryOverwriteRequestControlLock/TcgMorLockSmm.inf @@ -29,7 +29,7 @@ # # The following information is for reference only and not required by the = build tools. # -# VALID_ARCHITECTURES =3D IA32 X64 IPF EBC +# VALID_ARCHITECTURES =3D IA32 X64 EBC # =20 [Sources] diff --git a/SecurityPkg/Tcg/Opal/OpalPassword/OpalPasswordDxe.inf b/Securi= tyPkg/Tcg/Opal/OpalPassword/OpalPasswordDxe.inf index 0ac550a728..0a82f30959 100644 --- a/SecurityPkg/Tcg/Opal/OpalPassword/OpalPasswordDxe.inf +++ b/SecurityPkg/Tcg/Opal/OpalPassword/OpalPasswordDxe.inf @@ -25,7 +25,7 @@ # # The following information is for reference only and not required by the = build tools. # -# VALID_ARCHITECTURES =3D IA32 X64 IPF EBC +# VALID_ARCHITECTURES =3D IA32 X64 EBC # =20 [Sources] diff --git a/SecurityPkg/Tcg/PhysicalPresencePei/PhysicalPresencePei.inf b/= SecurityPkg/Tcg/PhysicalPresencePei/PhysicalPresencePei.inf index cac1abea34..384acc5207 100644 --- a/SecurityPkg/Tcg/PhysicalPresencePei/PhysicalPresencePei.inf +++ b/SecurityPkg/Tcg/PhysicalPresencePei/PhysicalPresencePei.inf @@ -29,7 +29,7 @@ # # The following information is for reference only and not required by the = build tools. # -# VALID_ARCHITECTURES =3D IA32 X64 IPF +# VALID_ARCHITECTURES =3D IA32 X64 # =20 [Sources] @@ -61,4 +61,4 @@ =20 [UserExtensions.TianoCore."ExtraFiles"] PhysicalPresencePeiExtra.uni - =20 \ No newline at end of file + diff --git a/SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigDxe.inf b/SecurityPkg/Tcg= /Tcg2Config/Tcg2ConfigDxe.inf index 38fa331701..a61edbea07 100644 --- a/SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigDxe.inf +++ b/SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigDxe.inf @@ -25,7 +25,7 @@ UNLOAD_IMAGE =3D Tcg2ConfigDriverUnload =20 # -# VALID_ARCHITECTURES =3D IA32 X64 IPF EBC +# VALID_ARCHITECTURES =3D IA32 X64 EBC # =20 [Sources] diff --git a/SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigPei.inf b/SecurityPkg/Tcg= /Tcg2Config/Tcg2ConfigPei.inf index 8dd0b63e48..12469cb9bd 100644 --- a/SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigPei.inf +++ b/SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigPei.inf @@ -24,7 +24,7 @@ ENTRY_POINT =3D Tcg2ConfigPeimEntryPoint =20 # -# VALID_ARCHITECTURES =3D IA32 X64 IPF EBC +# VALID_ARCHITECTURES =3D IA32 X64 EBC # # [BootMode] # S3_RESUME ## SOMETIMES_CONSUMES diff --git a/SecurityPkg/Tcg/Tcg2Dxe/Tcg2Dxe.inf b/SecurityPkg/Tcg/Tcg2Dxe/= Tcg2Dxe.inf index 59d6dc3dfb..be78c872b2 100644 --- a/SecurityPkg/Tcg/Tcg2Dxe/Tcg2Dxe.inf +++ b/SecurityPkg/Tcg/Tcg2Dxe/Tcg2Dxe.inf @@ -36,7 +36,7 @@ # # The following information is for reference only and not required by the = build tools. # -# VALID_ARCHITECTURES =3D IA32 X64 IPF +# VALID_ARCHITECTURES =3D IA32 X64 # =20 [Sources] diff --git a/SecurityPkg/Tcg/Tcg2Pei/Tcg2Pei.inf b/SecurityPkg/Tcg/Tcg2Pei/= Tcg2Pei.inf index a4aae1488f..ce09bd304d 100644 --- a/SecurityPkg/Tcg/Tcg2Pei/Tcg2Pei.inf +++ b/SecurityPkg/Tcg/Tcg2Pei/Tcg2Pei.inf @@ -31,7 +31,7 @@ # # The following information is for reference only and not required by the = build tools. # -# VALID_ARCHITECTURES =3D IA32 X64 IPF EBC +# VALID_ARCHITECTURES =3D IA32 X64 EBC # # [BootMode] # S3_RESUME ## SOMETIMES_CONSUMES diff --git a/SecurityPkg/Tcg/TcgConfigDxe/TcgConfigDxe.inf b/SecurityPkg/Tc= g/TcgConfigDxe/TcgConfigDxe.inf index 82fc35eea0..c2423316af 100644 --- a/SecurityPkg/Tcg/TcgConfigDxe/TcgConfigDxe.inf +++ b/SecurityPkg/Tcg/TcgConfigDxe/TcgConfigDxe.inf @@ -23,7 +23,7 @@ UNLOAD_IMAGE =3D TcgConfigDriverUnload =20 # -# VALID_ARCHITECTURES =3D IA32 X64 IPF EBC +# VALID_ARCHITECTURES =3D IA32 X64 EBC # =20 [Sources] diff --git a/SecurityPkg/Tcg/TcgDxe/TcgDxe.inf b/SecurityPkg/Tcg/TcgDxe/Tcg= Dxe.inf index 1b96ecbe2a..4223462d16 100644 --- a/SecurityPkg/Tcg/TcgDxe/TcgDxe.inf +++ b/SecurityPkg/Tcg/TcgDxe/TcgDxe.inf @@ -24,7 +24,7 @@ # # The following information is for reference only and not required by the = build tools. # -# VALID_ARCHITECTURES =3D IA32 X64 IPF +# VALID_ARCHITECTURES =3D IA32 X64 # =20 [Sources] @@ -83,4 +83,4 @@ =20 [UserExtensions.TianoCore."ExtraFiles"] TcgDxeExtra.uni - =20 \ No newline at end of file + diff --git a/SecurityPkg/Tcg/TcgPei/TcgPei.inf b/SecurityPkg/Tcg/TcgPei/Tcg= Pei.inf index 57ce7263e9..3bac54de01 100644 --- a/SecurityPkg/Tcg/TcgPei/TcgPei.inf +++ b/SecurityPkg/Tcg/TcgPei/TcgPei.inf @@ -26,7 +26,7 @@ # # The following information is for reference only and not required by the = build tools. # -# VALID_ARCHITECTURES =3D IA32 X64 IPF EBC +# VALID_ARCHITECTURES =3D IA32 X64 EBC # # [BootMode] # S3_RESUME ## SOMETIMES_CONSUMES @@ -89,4 +89,4 @@ =20 [UserExtensions.TianoCore."ExtraFiles"] TcgPeiExtra.uni - =20 \ No newline at end of file + diff --git a/SecurityPkg/VariableAuthenticated/EsalVariableDxeSal/AuthServi= ce.c b/SecurityPkg/VariableAuthenticated/EsalVariableDxeSal/AuthService.c deleted file mode 100644 index 490a8b3417..0000000000 --- a/SecurityPkg/VariableAuthenticated/EsalVariableDxeSal/AuthService.c +++ /dev/null @@ -1,886 +0,0 @@ -/** @file - Implement authentication services for the authenticated variable - service in UEFI2.2. - -Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.
-This program and the accompanying materials=20 -are licensed and made available under the terms and conditions of the BSD = License=20 -which accompanies this distribution. The full text of the license may be = found at=20 -http://opensource.org/licenses/bsd-license.php - -THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,=20 -WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLI= ED. - -**/ - -#include "Variable.h" -#include "AuthService.h" - -/// -/// Global database array for scratch -/// -UINT32 mPubKeyNumber; -UINT32 mPlatformMode; -EFI_GUID mSignatureSupport[SIGSUPPORT_NUM] =3D {EFI_CERT_RSA2048_SHA256_GU= ID, EFI_CERT_RSA2048_SHA1_GUID}; -// -// Public Exponent of RSA Key. -// -CONST UINT8 mRsaE[] =3D { 0x01, 0x00, 0x01 }; - -/** - Initializes for authenticated varibale service. - - @retval EFI_SUCCESS The function successfully executed. - @retval EFI_OUT_OF_RESOURCES Failed to allocate enough memory resources= . - -**/ -EFI_STATUS -AutenticatedVariableServiceInitialize ( - VOID - ) -{ - EFI_STATUS Status; - VARIABLE_POINTER_TRACK Variable; - UINT8 VarValue; - UINT32 VarAttr; - UINTN DataSize; - UINTN CtxSize; - AUTHENTICATED_VARIABLE_HEADER VariableHeader; - BOOLEAN Valid; - - ZeroMem (&VariableHeader, sizeof (AUTHENTICATED_VARIABLE_HEADER)); - - mVariableModuleGlobal->AuthenticatedVariableGuid[Physical] =3D &gEfiAuth= enticatedVariableGuid; - mVariableModuleGlobal->CertRsa2048Sha256Guid[Physical] =3D &gEfiCert= Rsa2048Sha256Guid; - mVariableModuleGlobal->ImageSecurityDatabaseGuid[Physical] =3D &gEfiImag= eSecurityDatabaseGuid; - - // - // Initialize hash context. - // - CtxSize =3D Sha256GetContextSize (); - mVariableModuleGlobal->HashContext[Physical] =3D AllocateRuntimePool (Ct= xSize); - ASSERT (mVariableModuleGlobal->HashContext[Physical] !=3D NULL); - // - // Check "AuthVarKeyDatabase" variable's existence.=20 - // If it doesn't exist, create a new one with initial value of 0 and EFI= _VARIABLE_AUTHENTICATED_WRITE_ACCESS set.=20 - // - Status =3D FindVariable ( - mVariableModuleGlobal->VariableName[Physical][VAR_AUTH_KEY_DB= ],=20 - &gEfiAuthenticatedVariableGuid,=20 - &Variable,=20 - &mVariableModuleGlobal->VariableGlobal[Physical], - mVariableModuleGlobal->FvbInstance - ); - - if (Variable.CurrPtr =3D=3D 0x0) { - VarAttr =3D EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACC= ESS | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_AUTHENTICATED_WRITE_AC= CESS; - VarValue =3D 0; - mPubKeyNumber =3D 0; - Status =3D UpdateVariable ( - mVariableModuleGlobal->VariableName[Physical][VAR_AU= TH_KEY_DB], - &gEfiAuthenticatedVariableGuid, - &VarValue, - sizeof(UINT8), - VarAttr, - 0, - 0, - FALSE, - mVariableModuleGlobal, - &Variable - ); - if (EFI_ERROR (Status)) { - return Status; - } - } else { - // - // Load database in global variable for cache. - // - Valid =3D IsValidVariableHeader ( - Variable.CurrPtr,=20 - Variable.Volatile,=20 - &mVariableModuleGlobal->VariableGlobal[Physical],=20 - mVariableModuleGlobal->FvbInstance,=20 - &VariableHeader - ); - ASSERT (Valid); - - DataSize =3D DataSizeOfVariable (&VariableHeader); - ASSERT (DataSize <=3D MAX_KEYDB_SIZE); - GetVariableDataPtr ( - Variable.CurrPtr, - Variable.Volatile, - &mVariableModuleGlobal->VariableGlobal[Physical], - mVariableModuleGlobal->FvbInstance, - (CHAR16 *) mVariableModuleGlobal->PubKeyStore - ); - - mPubKeyNumber =3D (UINT32) (DataSize / EFI_CERT_TYPE_RSA2048_SIZE); - } - // - // Check "SetupMode" variable's existence.=20 - // If it doesn't exist, check PK database's existence to determine the v= alue. - // Then create a new one with EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS se= t.=20 - // - Status =3D FindVariable ( - mVariableModuleGlobal->VariableName[Physical][VAR_SETUP_MODE]= ,=20 - &gEfiGlobalVariableGuid,=20 - &Variable,=20 - &mVariableModuleGlobal->VariableGlobal[Physical], - mVariableModuleGlobal->FvbInstance - ); - - if (Variable.CurrPtr =3D=3D 0x0) { - Status =3D FindVariable ( - mVariableModuleGlobal->VariableName[Physical][VAR_PLATFORM_= KEY],=20 - &gEfiGlobalVariableGuid,=20 - &Variable,=20 - &mVariableModuleGlobal->VariableGlobal[Physical], - mVariableModuleGlobal->FvbInstance - ); - if (Variable.CurrPtr =3D=3D 0x0) { - mPlatformMode =3D SETUP_MODE; - } else { - mPlatformMode =3D USER_MODE; - } - - VarAttr =3D EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACC= ESS | EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS; - Status =3D UpdateVariable ( - mVariableModuleGlobal->VariableName[Physical][VAR_SETUP_MO= DE], - &gEfiGlobalVariableGuid, - &mPlatformMode, - sizeof(UINT8), - VarAttr, - 0, - 0, - FALSE, - mVariableModuleGlobal, - &Variable - ); - if (EFI_ERROR (Status)) { - return Status; - } - } else { - GetVariableDataPtr ( - Variable.CurrPtr, - Variable.Volatile, - &mVariableModuleGlobal->VariableGlobal[Physical], - mVariableModuleGlobal->FvbInstance, - (CHAR16 *) &mPlatformMode - ); - } - // - // Check "SignatureSupport" variable's existence.=20 - // If it doesn't exist, then create a new one with EFI_VARIABLE_AUTHENTI= CATED_WRITE_ACCESS set.=20 - // - Status =3D FindVariable ( - EFI_SIGNATURE_SUPPORT_NAME,=20 - &gEfiGlobalVariableGuid,=20 - &Variable,=20 - &mVariableModuleGlobal->VariableGlobal[Physical], - mVariableModuleGlobal->FvbInstance - ); - - if (Variable.CurrPtr =3D=3D 0x0) { - VarAttr =3D EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACC= ESS | EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS; - Status =3D UpdateVariable ( - EFI_SIGNATURE_SUPPORT_NAME, - &gEfiGlobalVariableGuid, - mSignatureSupport, - SIGSUPPORT_NUM * sizeof(EFI_GUID), - VarAttr, - 0, - 0, - FALSE, - mVariableModuleGlobal, - &Variable - ); - } - - return Status; -} - -/** - Add public key in store and return its index. - - @param[in] VirtualMode The current calling mode for this fu= nction. - @param[in] Global The context of this Extended SAL Var= iable Services Class call. - @param[in] PubKey The input pointer to Public Key data= . - - @return The index of new added item. - -**/ -UINT32 -AddPubKeyInStore ( - IN BOOLEAN VirtualMode, - IN ESAL_VARIABLE_GLOBAL *Global, - IN UINT8 *PubKey - ) -{ - EFI_STATUS Status; - BOOLEAN IsFound; - UINT32 Index; - VARIABLE_POINTER_TRACK Variable; - UINT8 *Ptr; - - if (PubKey =3D=3D NULL) { - return 0; - } - - Status =3D FindVariable ( - Global->VariableName[VirtualMode][VAR_AUTH_KEY_DB], - Global->AuthenticatedVariableGuid[VirtualMode], - &Variable, - &Global->VariableGlobal[VirtualMode], - Global->FvbInstance - ); - ASSERT_EFI_ERROR (Status); - // - // Check whether the public key entry does exist. - // - IsFound =3D FALSE; - for (Ptr =3D Global->PubKeyStore, Index =3D 1; Index <=3D mPubKeyNumber;= Index++) { - if (CompareMem (Ptr, PubKey, EFI_CERT_TYPE_RSA2048_SIZE) =3D=3D 0) { - IsFound =3D TRUE; - break; - } - Ptr +=3D EFI_CERT_TYPE_RSA2048_SIZE; - } - - if (!IsFound) { - // - // Add public key in database. - // - if (mPubKeyNumber =3D=3D MAX_KEY_NUM) { - // - // Notes: Database is full, need enhancement here, currently just re= turn 0. - // - return 0; - } - - CopyMem (Global->PubKeyStore + mPubKeyNumber * EFI_CERT_TYPE_RSA2048_S= IZE, PubKey, EFI_CERT_TYPE_RSA2048_SIZE); - Index =3D ++mPubKeyNumber; - // - // Update public key database variable. - // - Status =3D UpdateVariable ( - Global->VariableName[VirtualMode][VAR_AUTH_KEY_DB], - Global->AuthenticatedVariableGuid[VirtualMode], - Global->PubKeyStore, - mPubKeyNumber * EFI_CERT_TYPE_RSA2048_SIZE, - EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCESS | E= FI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS, - 0, - 0, - VirtualMode, - Global, - &Variable - ); - ASSERT_EFI_ERROR (Status); - } - - return Index; -} - -/** - Verify data payload with AuthInfo in EFI_CERT_TYPE_RSA2048_SHA256 type. - Follow the steps in UEFI2.2. - - @param[in] VirtualMode The current calling mode for this fu= nction. - @param[in] Global The context of this Extended SAL Var= iable Services Class call. - @param[in] Data The pointer to data with AuthInfo. - @param[in] DataSize The size of Data. - @param[in] PubKey The public key used for verification= . - - @retval EFI_INVALID_PARAMETER Invalid parameter. - @retval EFI_SECURITY_VIOLATION Authentication failed. - @retval EFI_SUCCESS Authentication successful. - -**/ -EFI_STATUS -VerifyDataPayload ( - IN BOOLEAN VirtualMode, - IN ESAL_VARIABLE_GLOBAL *Global, - IN UINT8 *Data, - IN UINTN DataSize, - IN UINT8 *PubKey - ) -{ - BOOLEAN Status; - EFI_VARIABLE_AUTHENTICATION *CertData; - EFI_CERT_BLOCK_RSA_2048_SHA256 *CertBlock; - UINT8 Digest[SHA256_DIGEST_SIZE]; - VOID *Rsa; - VOID *HashContext; - - Rsa =3D NULL; - CertData =3D NULL; - CertBlock =3D NULL; - - if (Data =3D=3D NULL || PubKey =3D=3D NULL) { - return EFI_INVALID_PARAMETER; - } - - CertData =3D (EFI_VARIABLE_AUTHENTICATION *) Data; - CertBlock =3D (EFI_CERT_BLOCK_RSA_2048_SHA256 *) (CertData->AuthInfo.Cer= tData); - - // - // wCertificateType should be WIN_CERT_TYPE_EFI_GUID. - // Cert type should be EFI_CERT_TYPE_RSA2048_SHA256. - // - if ((CertData->AuthInfo.Hdr.wCertificateType !=3D WIN_CERT_TYPE_EFI_GUID= ) || - !CompareGuid (&CertData->AuthInfo.CertType, Global->CertRsa2048Sha25= 6Guid[VirtualMode]) - ) { - // - // Invalid AuthInfo type, return EFI_SECURITY_VIOLATION. - // - return EFI_SECURITY_VIOLATION; - } - - // - // Hash data payload with SHA256. - // - ZeroMem (Digest, SHA256_DIGEST_SIZE); - HashContext =3D Global->HashContext[VirtualMode]; - Status =3D Sha256Init (HashContext); - if (!Status) { - goto Done; - } - Status =3D Sha256Update (HashContext, Data + AUTHINFO_SIZE, (UINTN) (Da= taSize - AUTHINFO_SIZE)); - if (!Status) { - goto Done; - } - // - // Hash Monotonic Count. - // - Status =3D Sha256Update (HashContext, &CertData->MonotonicCount, sizeof= (UINT64)); - if (!Status) { - goto Done; - } - Status =3D Sha256Final (HashContext, Digest); - if (!Status) { - goto Done; - } - // - // Generate & Initialize RSA Context. - // - Rsa =3D RsaNew (); - ASSERT (Rsa !=3D NULL); - //=20 - // Set RSA Key Components. - // NOTE: Only N and E are needed to be set as RSA public key for signatu= re verification. - // - Status =3D RsaSetKey (Rsa, RsaKeyN, PubKey, EFI_CERT_TYPE_RSA2048_SIZE); - if (!Status) { - goto Done; - } - Status =3D RsaSetKey (Rsa, RsaKeyE, mRsaE, sizeof (mRsaE)); - if (!Status) { - goto Done; - } - // - // Verify the signature. - // - Status =3D RsaPkcs1Verify ( - Rsa,=20 - Digest,=20 - SHA256_DIGEST_SIZE,=20 - CertBlock->Signature,=20 - EFI_CERT_TYPE_RSA2048_SHA256_SIZE - ); - -Done: - if (Rsa !=3D NULL) { - RsaFree (Rsa); - } - if (Status) { - return EFI_SUCCESS; - } else { - return EFI_SECURITY_VIOLATION; - } -} - - -/** - Update platform mode. - - @param[in] VirtualMode The current calling mode for this fu= nction. - @param[in] Global The context of this Extended SAL Var= iable Services Class call. - @param[in] Mode SETUP_MODE or USER_MODE. - -**/ -VOID -UpdatePlatformMode ( - IN BOOLEAN VirtualMode, - IN ESAL_VARIABLE_GLOBAL *Global, - IN UINT32 Mode - ) -{ - EFI_STATUS Status; - VARIABLE_POINTER_TRACK Variable; - UINT32 VarAttr; - - Status =3D FindVariable ( - Global->VariableName[VirtualMode][VAR_SETUP_MODE],=20 - Global->GlobalVariableGuid[VirtualMode],=20 - &Variable,=20 - &Global->VariableGlobal[VirtualMode], - Global->FvbInstance - ); - ASSERT_EFI_ERROR (Status); - - mPlatformMode =3D Mode; - VarAttr =3D EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCE= SS | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_AUTHENTICATED_WRITE_ACC= ESS; - Status =3D UpdateVariable ( - Global->VariableName[VirtualMode][VAR_SETUP_MODE], - Global->GlobalVariableGuid[VirtualMode], - &mPlatformMode, - sizeof(UINT8), - VarAttr, - 0, - 0, - VirtualMode, - Global, - &Variable - ); - ASSERT_EFI_ERROR (Status); -} - -/** - Process variable with platform key for verification. - - @param[in] VariableName The name of Variable to be found= . - @param[in] VendorGuid The variable vendor GUID. - @param[in] Data The data pointer. - @param[in] DataSize The size of Data found. If size = is less than the - data, this value contains the re= quired size. - @param[in] VirtualMode The current calling mode for thi= s function. - @param[in] Global The context of this Extended SAL= Variable Services Class call. - @param[in] Variable The variable information which i= s used to keep track of variable usage. - @param[in] Attributes The attribute value of the varia= ble. - @param[in] IsPk Indicates whether to process pk. - - @retval EFI_INVALID_PARAMETER Invalid parameter. - @retval EFI_SECURITY_VIOLATION The variable does NOT pass the v= alidation=20 - check carried out by the firmwar= e.=20 - @retval EFI_SUCCESS The variable passed validation s= uccessfully. - -**/ -EFI_STATUS -ProcessVarWithPk ( - IN CHAR16 *VariableName, - IN EFI_GUID *VendorGuid, - IN VOID *Data, - IN UINTN DataSize, - IN BOOLEAN VirtualMode, - IN ESAL_VARIABLE_GLOBAL *Global, - IN VARIABLE_POINTER_TRACK *Variable, - IN UINT32 Attributes OPTIONAL, - IN BOOLEAN IsPk - ) -{ - EFI_STATUS Status; - VARIABLE_POINTER_TRACK PkVariable; - EFI_SIGNATURE_LIST *OldPkList; - EFI_SIGNATURE_DATA *OldPkData; - EFI_VARIABLE_AUTHENTICATION *CertData; - AUTHENTICATED_VARIABLE_HEADER VariableHeader; - BOOLEAN Valid; - - OldPkList =3D NULL; - ZeroMem (&VariableHeader, sizeof (AUTHENTICATED_VARIABLE_HEADER)); - - if ((Attributes & EFI_VARIABLE_NON_VOLATILE) =3D=3D 0) { - // - // PK and KEK should set EFI_VARIABLE_NON_VOLATILE attribute. - // - return EFI_INVALID_PARAMETER; - } - - if (mPlatformMode =3D=3D USER_MODE) { - if ((Attributes & EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS) =3D=3D 0) { - // - // In user mode, PK and KEK should set EFI_VARIABLE_AUTHENTICATED_WR= ITE_ACCESS attribute. - // - return EFI_INVALID_PARAMETER; - } - - CertData =3D (EFI_VARIABLE_AUTHENTICATION *) Data; - - if (Variable->CurrPtr !=3D 0x0) { - Valid =3D IsValidVariableHeader ( - Variable->CurrPtr,=20 - Variable->Volatile,=20 - &Global->VariableGlobal[VirtualMode],=20 - Global->FvbInstance,=20 - &VariableHeader - ); - ASSERT (Valid); - - if (CertData->MonotonicCount <=3D VariableHeader.MonotonicCount) { - // - // Monotonic count check fail, suspicious replay attack, return EF= I_SECURITY_VIOLATION. - // - return EFI_SECURITY_VIOLATION; - } - } - // - // Get platform key from variable. - // - Status =3D FindVariable ( - Global->VariableName[VirtualMode][VAR_PLATFORM_KEY],=20 - Global->GlobalVariableGuid[VirtualMode],=20 - &PkVariable,=20 - &Global->VariableGlobal[VirtualMode], - Global->FvbInstance - ); - ASSERT_EFI_ERROR (Status); - - ZeroMem (Global->KeyList, MAX_KEYDB_SIZE); - GetVariableDataPtr ( - PkVariable.CurrPtr, - PkVariable.Volatile, - &Global->VariableGlobal[VirtualMode], - Global->FvbInstance, - (CHAR16 *) Global->KeyList - ); - - OldPkList =3D (EFI_SIGNATURE_LIST *) Global->KeyList; - OldPkData =3D (EFI_SIGNATURE_DATA *) ((UINT8 *) OldPkList + sizeof (EF= I_SIGNATURE_LIST) + OldPkList->SignatureHeaderSize); - Status =3D VerifyDataPayload (VirtualMode, Global, Data, DataSize, = OldPkData->SignatureData); - if (!EFI_ERROR (Status)) { - Status =3D UpdateVariable ( - VariableName,=20 - VendorGuid,=20 - (UINT8*)Data + AUTHINFO_SIZE,=20 - DataSize - AUTHINFO_SIZE,=20 - Attributes,=20 - 0,=20 - CertData->MonotonicCount,=20 - VirtualMode,=20 - Global, - Variable - ); - - if (!EFI_ERROR (Status)) { - // - // If delete PK in user mode, need change to setup mode. - // - if ((DataSize =3D=3D AUTHINFO_SIZE) && IsPk) { - UpdatePlatformMode (VirtualMode, Global, SETUP_MODE); - } - } - } - } else { - Status =3D UpdateVariable (VariableName, VendorGuid, Data, DataSize, A= ttributes, 0, 0, VirtualMode, Global, Variable); - // - // If enroll PK in setup mode, need change to user mode. - // - if ((DataSize !=3D 0) && IsPk) { - UpdatePlatformMode (VirtualMode, Global, USER_MODE); - } - } - - return Status; -} - -/** - Process variable with key exchange key for verification. - - @param[in] VariableName The name of Variable to be found= . - @param[in] VendorGuid The variable vendor GUID. - @param[in] Data The data pointer. - @param[in] DataSize The size of Data found. If size = is less than the - data, this value contains the re= quired size. - @param[in] VirtualMode The current calling mode for thi= s function. - @param[in] Global The context of this Extended SAL= Variable Services Class call. - @param[in] Variable The variable information which i= s used to keep track of variable usage. - @param[in] Attributes The attribute value of the varia= ble. - - @retval EFI_INVALID_PARAMETER Invalid parameter. - @retval EFI_SECURITY_VIOLATION The variable did NOT pass the va= lidation=20 - check carried out by the firmwar= e.=20 - @retval EFI_SUCCESS The variable passed validation s= uccessfully. - -**/ -EFI_STATUS -ProcessVarWithKek ( - IN CHAR16 *VariableName, - IN EFI_GUID *VendorGuid, - IN VOID *Data, - IN UINTN DataSize, - IN BOOLEAN VirtualMode, - IN ESAL_VARIABLE_GLOBAL *Global, - IN VARIABLE_POINTER_TRACK *Variable, - IN UINT32 Attributes OPTIONAL - ) -{ - EFI_STATUS Status; - VARIABLE_POINTER_TRACK KekVariable; - EFI_SIGNATURE_LIST *KekList; - EFI_SIGNATURE_DATA *KekItem; - UINT32 KekCount; - EFI_VARIABLE_AUTHENTICATION *CertData; - EFI_CERT_BLOCK_RSA_2048_SHA256 *CertBlock; - BOOLEAN IsFound; - UINT32 Index; - AUTHENTICATED_VARIABLE_HEADER VariableHeader; - BOOLEAN Valid; - - KekList =3D NULL; - ZeroMem (&VariableHeader, sizeof (AUTHENTICATED_VARIABLE_HEADER)); - - if (mPlatformMode =3D=3D USER_MODE) { - if ((Attributes & EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS) =3D=3D 0) { - // - // In user mode, should set EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS = attribute. - // - return EFI_INVALID_PARAMETER; - } - - CertData =3D (EFI_VARIABLE_AUTHENTICATION *) Data; - CertBlock =3D (EFI_CERT_BLOCK_RSA_2048_SHA256 *) (CertData->AuthInfo.C= ertData); - if (Variable->CurrPtr !=3D 0x0) { - Valid =3D IsValidVariableHeader ( - Variable->CurrPtr,=20 - Variable->Volatile,=20 - &Global->VariableGlobal[VirtualMode],=20 - Global->FvbInstance,=20 - &VariableHeader - ); - ASSERT (Valid); - - if (CertData->MonotonicCount <=3D VariableHeader.MonotonicCount) { - // - // Monotonic count check fail, suspicious replay attack, return EF= I_SECURITY_VIOLATION. - // - return EFI_SECURITY_VIOLATION; - } - } - // - // Get KEK database from variable. - // - Status =3D FindVariable ( - Global->VariableName[VirtualMode][VAR_KEY_EXCHANGE_KEY],=20 - Global->GlobalVariableGuid[VirtualMode],=20 - &KekVariable,=20 - &Global->VariableGlobal[VirtualMode], - Global->FvbInstance - ); - ASSERT_EFI_ERROR (Status); - - ZeroMem (Global->KeyList, MAX_KEYDB_SIZE); - GetVariableDataPtr ( - KekVariable.CurrPtr, - KekVariable.Volatile, - &Global->VariableGlobal[VirtualMode], - Global->FvbInstance, - (CHAR16 *) Global->KeyList - ); - // - // Enumerate all Kek items in this list to verify the variable certifi= cate data. - // If anyone is authenticated successfully, it means the variable is c= orrect! - // - KekList =3D (EFI_SIGNATURE_LIST *) Global->KeyList; - IsFound =3D FALSE; - KekCount =3D (KekList->SignatureListSize - sizeof (EFI_SIGNATURE_LIST= ) - KekList->SignatureHeaderSize) / KekList->SignatureSize; - KekItem =3D (EFI_SIGNATURE_DATA *) ((UINT8 *) KekList + sizeof (EFI_= SIGNATURE_LIST) + KekList->SignatureHeaderSize); - for (Index =3D 0; Index < KekCount; Index++) { - if (CompareMem (KekItem->SignatureData, CertBlock->PublicKey, EFI_CE= RT_TYPE_RSA2048_SIZE) =3D=3D 0) { - IsFound =3D TRUE; - break; - } - KekItem =3D (EFI_SIGNATURE_DATA *) ((UINT8 *) KekItem + KekList->Sig= natureSize); - } - - if (!IsFound) { - return EFI_SECURITY_VIOLATION; - } - - Status =3D VerifyDataPayload (VirtualMode, Global, Data, DataSize, Cer= tBlock->PublicKey); - if (!EFI_ERROR (Status)) { - Status =3D UpdateVariable ( - VariableName,=20 - VendorGuid,=20 - (UINT8*)Data + AUTHINFO_SIZE,=20 - DataSize - AUTHINFO_SIZE,=20 - Attributes,=20 - 0,=20 - CertData->MonotonicCount,=20 - VirtualMode, - Global, - Variable - ); - } - } else { - // - // If in setup mode, no authentication needed. - // - Status =3D UpdateVariable ( - VariableName,=20 - VendorGuid,=20 - Data,=20 - DataSize,=20 - Attributes,=20 - 0,=20 - 0,=20 - VirtualMode, - Global, - Variable - ); - } - - return Status; -} - -/** - Process variable with EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS set, and r= eturn the index of associated public key. - - @param[in] Data The data pointer. - @param[in] DataSize The size of Data found. If size = is less than the - data, this value contains the re= quired size. - @param[in] VirtualMode The current calling mode for thi= s function. - @param[in] Global The context of this Extended SAL= Variable Services Class call. - @param[in] Variable The variable information which i= s used to keep track of variable usage. - @param[in] Attributes The attribute value of the varia= ble. - @param[out] KeyIndex The output index of correspondin= g public key in database. - @param[out] MonotonicCount The output value of correspondin= g Monotonic Count. - - @retval EFI_INVALID_PARAMETER Invalid parameter. - @retval EFI_WRITE_PROTECTED The variable is write-protected = and needs authentication with - EFI_VARIABLE_AUTHENTICATED_WRITE= _ACCESS set. - @retval EFI_SECURITY_VIOLATION The variable is with EFI_VARIABL= E_AUTHENTICATED_WRITE_ACCESS - set, but the AuthInfo does NOT p= ass the validation=20 - check carried out by the firmwar= e.=20 - @retval EFI_SUCCESS The variable is not write-protec= ted, or passed validation successfully. - -**/ -EFI_STATUS -VerifyVariable ( - IN VOID *Data, - IN UINTN DataSize, - IN BOOLEAN VirtualMode, - IN ESAL_VARIABLE_GLOBAL *Global, - IN VARIABLE_POINTER_TRACK *Variable, - IN UINT32 Attributes OPTIONAL, - OUT UINT32 *KeyIndex OPTIONAL, - OUT UINT64 *MonotonicCount OPTIONAL - ) -{ - EFI_STATUS Status; - BOOLEAN IsDeletion; - BOOLEAN IsFirstTime; - UINT8 *PubKey; - EFI_VARIABLE_AUTHENTICATION *CertData; - EFI_CERT_BLOCK_RSA_2048_SHA256 *CertBlock; - AUTHENTICATED_VARIABLE_HEADER VariableHeader; - BOOLEAN Valid; - - CertData =3D NULL; - CertBlock =3D NULL; - PubKey =3D NULL; - IsDeletion =3D FALSE; - Valid =3D FALSE; - - if (KeyIndex !=3D NULL) { - *KeyIndex =3D 0; - } - // - // Determine if first time SetVariable with the EFI_VARIABLE_AUTHENTICAT= ED_WRITE_ACCESS. - // - ZeroMem (&VariableHeader, sizeof (AUTHENTICATED_VARIABLE_HEADER)); - if (Variable->CurrPtr !=3D 0x0) { - Valid =3D IsValidVariableHeader ( - Variable->CurrPtr,=20 - Variable->Volatile,=20 - &Global->VariableGlobal[VirtualMode],=20 - Global->FvbInstance,=20 - &VariableHeader - ); - ASSERT (Valid); - } - - if ((Attributes & EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS) !=3D 0) { - if (KeyIndex =3D=3D NULL) { - return EFI_INVALID_PARAMETER; - } - - // - // Determine current operation type. - // - if (DataSize =3D=3D AUTHINFO_SIZE) { - IsDeletion =3D TRUE; - } - // - // Determine whether this is the first time with EFI_VARIABLE_AUTHENTI= CATED_WRITE_ACCESS set. - // - if (Variable->CurrPtr =3D=3D 0x0) { - IsFirstTime =3D TRUE; - } else if (Valid &&(VariableHeader.Attributes & EFI_VARIABLE_AUTHENTIC= ATED_WRITE_ACCESS) =3D=3D 0) { - IsFirstTime =3D TRUE; - } else { - *KeyIndex =3D VariableHeader.PubKeyIndex; - IsFirstTime =3D FALSE; - } - } else if (Valid && (VariableHeader.Attributes & EFI_VARIABLE_AUTHENTICA= TED_WRITE_ACCESS) !=3D 0) {=20 - // - // If the variable is already write-protected, it always needs authe= ntication before update. - // - return EFI_WRITE_PROTECTED; - } else { - // - // If without EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS, set and attribu= tes collision. - // That means it is not authenticated variable, just return EFI_SUCCES= S. - // - return EFI_SUCCESS; - } - - // - // Get PubKey and check Monotonic Count value corresponding to the varia= ble. - // - CertData =3D (EFI_VARIABLE_AUTHENTICATION *) Data; - CertBlock =3D (EFI_CERT_BLOCK_RSA_2048_SHA256 *) (CertData->AuthInfo.Cer= tData); - PubKey =3D CertBlock->PublicKey; - - if (MonotonicCount !=3D NULL) { - // - // Update Monotonic Count value. - // - *MonotonicCount =3D CertData->MonotonicCount; - } - - if (!IsFirstTime) { - // - // Check input PubKey. - // - if (CompareMem (PubKey, Global->PubKeyStore + (*KeyIndex - 1) * EFI_CE= RT_TYPE_RSA2048_SIZE, EFI_CERT_TYPE_RSA2048_SIZE) !=3D 0) { - return EFI_SECURITY_VIOLATION; - } - // - // Compare the current monotonic count and ensure that it is greater t= han the last SetVariable - // operation with the EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS attribut= e set. - // - if (CertData->MonotonicCount <=3D VariableHeader.MonotonicCount) { - // - // Monotonic count check fail, suspicious replay attack, return EFI_= SECURITY_VIOLATION. - // - return EFI_SECURITY_VIOLATION; - } - }=20 - // - // Verify the certificate in Data payload. - // - Status =3D VerifyDataPayload (VirtualMode, Global, Data, DataSize, PubKe= y); - if (!EFI_ERROR (Status)) { - // - // Now, the signature has been verified! - // - if (IsFirstTime && !IsDeletion) { - // - // Update public key database variable if need and return the index. - // - *KeyIndex =3D AddPubKeyInStore (VirtualMode, Global, PubKey); - } - } - - return Status; -} - diff --git a/SecurityPkg/VariableAuthenticated/EsalVariableDxeSal/AuthServi= ce.h b/SecurityPkg/VariableAuthenticated/EsalVariableDxeSal/AuthService.h deleted file mode 100644 index f3e15f61e2..0000000000 --- a/SecurityPkg/VariableAuthenticated/EsalVariableDxeSal/AuthService.h +++ /dev/null @@ -1,151 +0,0 @@ -/** @file - The internal header file includes the common header files, defines - internal structure and functions used by AuthService module. - -Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.
-This program and the accompanying materials=20 -are licensed and made available under the terms and conditions of the BSD = License=20 -which accompanies this distribution. The full text of the license may be = found at=20 -http://opensource.org/licenses/bsd-license.php - -THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,=20 -WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLI= ED. - -**/ - -#ifndef _AUTHSERVICE_H_ -#define _AUTHSERVICE_H_ - -#define EFI_CERT_TYPE_RSA2048_SHA256_SIZE 256 -#define EFI_CERT_TYPE_RSA2048_SIZE 256 - -/// -/// Size of AuthInfo prior to the data payload -/// -#define AUTHINFO_SIZE (((UINTN)(((EFI_VARIABLE_AUTHENTICATION *) 0)->AuthI= nfo.CertData)) + sizeof (EFI_CERT_BLOCK_RSA_2048_SHA256)) - -/// -/// Item number of support signature types. -/// -#define SIGSUPPORT_NUM 2 - -/** - Process variable with EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS set, and r= eturn the index of associated public key. - - @param[in] Data The data pointer. - @param[in] DataSize The size of Data found. If size = is less than the - data, this value contains the re= quired size. - @param[in] VirtualMode The current calling mode for thi= s function. - @param[in] Global The context of this Extended SAL= Variable Services Class call. - @param[in] Variable The variable information which i= s used to keep track of variable usage. - @param[in] Attributes The attribute value of the varia= ble. - @param[out] KeyIndex The output index of correspondin= g public key in database. - @param[out] MonotonicCount The output value of correspondin= g Monotonic Count. - - @retval EFI_INVALID_PARAMETER Invalid parameter. - @retval EFI_WRITE_PROTECTED The variable is write-protected = and needs authentication with - EFI_VARIABLE_AUTHENTICATED_WRITE= _ACCESS set. - @retval EFI_SECURITY_VIOLATION The variable is with EFI_VARIABL= E_AUTHENTICATED_WRITE_ACCESS - set, but the AuthInfo does NOT p= ass the validation=20 - check carried out by the firmwar= e.=20 - @retval EFI_SUCCESS The variable is not write-protec= ted, or passed validation successfully. - -**/ -EFI_STATUS -VerifyVariable ( - IN VOID *Data, - IN UINTN DataSize, - IN BOOLEAN VirtualMode, - IN ESAL_VARIABLE_GLOBAL *Global, - IN VARIABLE_POINTER_TRACK *Variable, - IN UINT32 Attributes OPTIONAL, - OUT UINT32 *KeyIndex OPTIONAL, - OUT UINT64 *MonotonicCount OPTIONAL - ); - -/** - Initializes for authenticated varibale service. - - @retval EFI_SUCCESS The function successfully executed. - @retval EFI_OUT_OF_RESOURCES Failed to allocate enough memory resources= . - -**/ -EFI_STATUS -AutenticatedVariableServiceInitialize ( - VOID - ); - -/** - Initializes for cryptlib service before use, include register algrithm a= nd allocate scratch. - -**/ -VOID -CryptLibraryInitialize ( - VOID - ); - -/** - Process variable with platform key for verification. - - @param[in] VariableName The name of Variable to be found= . - @param[in] VendorGuid Variable vendor GUID. - @param[in] Data The data pointer. - @param[in] DataSize The size of Data found. If size = is less than the - data, this value contains the re= quired size. - @param[in] VirtualMode The current calling mode for thi= s function. - @param[in] Global The context of this Extended SAL= Variable Services Class call. - @param[in] Variable The variable information which i= s used to keep track of variable usage. - @param[in] Attributes The attribute value of the varia= ble. - @param[in] IsPk Indicates whether to process pk. - - @retval EFI_INVALID_PARAMETER Invalid parameter. - @retval EFI_SECURITY_VIOLATION The variable does NOT pass the v= alidation=20 - check carried out by the firmwar= e.=20 - @retval EFI_SUCCESS The variable passed validation s= uccessfully. - -**/ -EFI_STATUS -ProcessVarWithPk ( - IN CHAR16 *VariableName, - IN EFI_GUID *VendorGuid, - IN VOID *Data, - IN UINTN DataSize, - IN BOOLEAN VirtualMode, - IN ESAL_VARIABLE_GLOBAL *Global, - IN VARIABLE_POINTER_TRACK *Variable, - IN UINT32 Attributes OPTIONAL, - IN BOOLEAN IsPk - ); - -/** - Process variable with key exchange key for verification. - - @param[in] VariableName The name of Variable to be found= . - @param[in] VendorGuid The variable vendor GUID. - @param[in] Data The data pointer. - @param[in] DataSize Size of Data found. If size is l= ess than the - data, this value contains the re= quired size. - @param[in] VirtualMode The current calling mode for thi= s function. - @param[in] Global The context of this Extended SAL= Variable Services Class call. - @param[in] Variable The variable information which i= s used to keep track of variable usage. - @param[in] Attributes The attribute value of the varia= ble. - - @retval EFI_INVALID_PARAMETER Invalid parameter. - @retval EFI_SECURITY_VIOLATION The variable does NOT pass the v= alidation=20 - check carried out by the firmwar= e.=20 - @retval EFI_SUCCESS The variable passed validation s= uccessfully. - -**/ -EFI_STATUS -ProcessVarWithKek ( - IN CHAR16 *VariableName, - IN EFI_GUID *VendorGuid, - IN VOID *Data, - IN UINTN DataSize, - IN BOOLEAN VirtualMode, - IN ESAL_VARIABLE_GLOBAL *Global, - IN VARIABLE_POINTER_TRACK *Variable, - IN UINT32 Attributes OPTIONAL - ); - -#endif diff --git a/SecurityPkg/VariableAuthenticated/EsalVariableDxeSal/EsalVaria= bleDxeSal.inf b/SecurityPkg/VariableAuthenticated/EsalVariableDxeSal/EsalVa= riableDxeSal.inf deleted file mode 100644 index 16caa30dad..0000000000 --- a/SecurityPkg/VariableAuthenticated/EsalVariableDxeSal/EsalVariableDxeS= al.inf +++ /dev/null @@ -1,105 +0,0 @@ -## @file -# Provides authenticated variable service for IPF platform -# -# This module installs variable arch protocol and variable write arch pro= tocol to provide -# four EFI_RUNTIME_SERVICES: SetVariable, GetVariable, GetNextVariableNam= e and QueryVariableInfo. -# -# Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.
-# This program and the accompanying materials -# are licensed and made available under the terms and conditions of the BS= D License -# which accompanies this distribution. The full text of the license may be= found at -# http://opensource.org/licenses/bsd-license.php -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMP= LIED. -# -## - -[Defines] - INF_VERSION =3D 0x00010005 - BASE_NAME =3D EsalVariableDxeSal - MODULE_UNI_FILE =3D EsalVariableDxeSal.uni - FILE_GUID =3D 14610837-4E97-4427-96E0-21D9B2956996 - MODULE_TYPE =3D DXE_SAL_DRIVER - VERSION_STRING =3D 1.0 - - ENTRY_POINT =3D VariableServiceInitialize - -# -# The following information is for reference only and not required by the = build tools. -# -# VALID_ARCHITECTURES =3D IPF -# -# VIRTUAL_ADDRESS_MAP_CALLBACK =3D VariableClassAddressChangeEvent = =20 -# - -[Sources.common] - InitVariable.c - Reclaim.c - Variable.c - Variable.h - AuthService.c - AuthService.h - -[Packages] - MdePkg/MdePkg.dec - MdeModulePkg/MdeModulePkg.dec - CryptoPkg/CryptoPkg.dec - SecurityPkg/SecurityPkg.dec - -[LibraryClasses] - MemoryAllocationLib - BaseLib - SynchronizationLib - UefiLib - UefiBootServicesTableLib - BaseMemoryLib - DebugLib - UefiRuntimeLib - DxeServicesTableLib - UefiDriverEntryPoint - PcdLib - ExtendedSalLib - BaseCryptLib - HobLib - -[Protocols] - gEfiFirmwareVolumeBlockProtocolGuid ## SOMETIMES_CONSUMES - gEfiFaultTolerantWriteProtocolGuid ## SOMETIMES_CONSUMES - -[Guids] - ## SOMETIMES_CONSUMES ## Variable:L"PK" - ## CONSUMES ## Variable:L"SetupMode" - ## PRODUCES ## Variable:L"SetupMode" - ## CONSUMES ## Variable:L"SignatureSupport" - ## PRODUCES ## Variable:L"SignatureSupport" - gEfiGlobalVariableGuid - =20 - ## PRODUCES ## GUID # Variable store header - ## CONSUMES ## GUID # Variable store header - ## SOMETIMES_CONSUMES ## HOB - ## SOMETIMES_PRODUCES ## SystemTable - gEfiAuthenticatedVariableGuid - =20 - gEfiEventVirtualAddressChangeGuid ## CONSUMES = ## Event - gEfiCertRsa2048Sha256Guid ## CONSUMES = ## GUID # Unique ID for the format of the CertType. - - ## SOMETIMES_CONSUMES ## Variable:L"DB" - ## SOMETIMES_CONSUMES ## Variable:L"DBX" - gEfiImageSecurityDatabaseGuid - -[Pcd.common] - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize = ## CONSUMES - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase = ## SOMETIMES_CONSUMES - gEfiMdeModulePkgTokenSpaceGuid.PcdMaxVariableSize = ## CONSUMES - gEfiMdeModulePkgTokenSpaceGuid.PcdMaxHardwareErrorVariableSize = ## CONSUMES - gEfiMdeModulePkgTokenSpaceGuid.PcdVariableStoreSize = ## CONSUMES - gEfiMdeModulePkgTokenSpaceGuid.PcdHwErrStorageSize = ## CONSUMES - =20 -[FeaturePcd.common] - gEfiMdeModulePkgTokenSpaceGuid.PcdVariableCollectStatistics = ## CONSUMES # statistic the information of variable. - -[Depex] - gEfiExtendedSalFvBlockServicesProtocolGuid AND gEfiFaultTolerantWritePro= tocolGuid =20 - -[UserExtensions.TianoCore."ExtraFiles"] - EsalVariableDxeSalExtra.uni \ No newline at end of file diff --git a/SecurityPkg/VariableAuthenticated/EsalVariableDxeSal/InitVaria= ble.c b/SecurityPkg/VariableAuthenticated/EsalVariableDxeSal/InitVariable.c deleted file mode 100644 index 0f1d645622..0000000000 --- a/SecurityPkg/VariableAuthenticated/EsalVariableDxeSal/InitVariable.c +++ /dev/null @@ -1,247 +0,0 @@ -/** @file - Entrypoint of Extended SAL variable service module. - -Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.
-This program and the accompanying materials=20 -are licensed and made available under the terms and conditions of the BSD = License=20 -which accompanies this distribution. The full text of the license may be = found at=20 -http://opensource.org/licenses/bsd-license.php - -THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,=20 -WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLI= ED. - -**/ - -#include "Variable.h" -#include "AuthService.h" - -// -// Don't use module globals after the SetVirtualAddress map is signaled -// -EFI_EVENT mEfiVirtualNotifyEvent; - -/** - Common entry for Extended SAL Variable Services Class. - - This is the common entry of all functions of Extended SAL Variable Servi= ces Class. - - @param[in] FunctionId The Function ID of member function in Exte= nded SAL Variable Services Class. - @param[in] Arg2 The 2nd parameter for SAL procedure call. - @param[in] Arg3 The 3rd parameter for SAL procedure call. - @param[in] Arg4 The 4th parameter for SAL procedure call. - @param[in] Arg5 The 5th parameter for SAL procedure call. - @param[in] Arg6 The 6th parameter for SAL procedure call. - @param[in] Arg7 The 7th parameter for SAL procedure call. - @param[in] Arg8 The 8th parameter for SAL procedure call. - @param[in] VirtualMode The current calling mode for this function= . - @param[in] Global The context of this Extended SAL Variable = Services Class call. - - @return The register of SAL. - -**/ -SAL_RETURN_REGS -EFIAPI -EsalVariableCommonEntry ( - IN UINT64 FunctionId, - IN UINT64 Arg2, - IN UINT64 Arg3, - IN UINT64 Arg4, - IN UINT64 Arg5, - IN UINT64 Arg6, - IN UINT64 Arg7, - IN UINT64 Arg8, - IN BOOLEAN VirtualMode, - IN ESAL_VARIABLE_GLOBAL *Global - ) -{ - SAL_RETURN_REGS ReturnVal; - =20 - ReturnVal.r9 =3D 0; - ReturnVal.r10 =3D 0; - ReturnVal.r11 =3D 0; - - switch (FunctionId) { - case EsalGetVariableFunctionId: - ReturnVal.Status =3D EsalGetVariable ( - (CHAR16 *) Arg2, - (EFI_GUID *) Arg3, - (UINT32 *) Arg4, - (UINTN *) Arg5, - (VOID *) Arg6, - VirtualMode, - Global - ); - return ReturnVal; - - case EsalGetNextVariableNameFunctionId: - ReturnVal.Status =3D EsalGetNextVariableName ( - (UINTN *) Arg2, - (CHAR16 *) Arg3, - (EFI_GUID *) Arg4, - VirtualMode, - Global - ); - return ReturnVal; - - case EsalSetVariableFunctionId: - ReturnVal.Status =3D EsalSetVariable ( - (CHAR16 *) Arg2, - (EFI_GUID *) Arg3, - (UINT32) Arg4, - (UINTN) Arg5, - (VOID *) Arg6, - VirtualMode, - Global - ); - return ReturnVal; - - case EsalQueryVariableInfoFunctionId: - ReturnVal.Status =3D EsalQueryVariableInfo ( - (UINT32) Arg2, - (UINT64 *) Arg3, - (UINT64 *) Arg4, - (UINT64 *) Arg5, - VirtualMode, - Global - ); - return ReturnVal; - - default: - ReturnVal.Status =3D EFI_SAL_INVALID_ARGUMENT; - return ReturnVal; - } -} - -/** - Notification function of EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE. - - This is a notification function registered on EVT_SIGNAL_VIRTUAL_ADDRESS= _CHANGE event. - It convers pointer to new virtual address. - - @param[in] Event The event whose notification function is being = invoked. - @param[in] Context The pointer to the notification function's cont= ext. - -**/ -VOID -EFIAPI -VariableClassAddressChangeEvent ( - IN EFI_EVENT Event, - IN VOID *Context - ) -{ - UINTN Index; - - CopyMem ( - &mVariableModuleGlobal->VariableGlobal[Virtual], - &mVariableModuleGlobal->VariableGlobal[Physical], - sizeof (VARIABLE_GLOBAL) - ); - - EfiConvertPointer ( - 0x0, - (VOID **) &mVariableModuleGlobal->VariableGlobal[Virtual].NonVolatileV= ariableBase - ); - EfiConvertPointer ( - 0x0, - (VOID **) &mVariableModuleGlobal->VariableGlobal[Virtual].VolatileVari= ableBase - ); - - mVariableModuleGlobal->PlatformLangCodes[Virtual] =3D mVariableModuleGlo= bal->PlatformLangCodes[Physical]; - EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->PlatformLangCo= des[Virtual]); - - mVariableModuleGlobal->LangCodes[Virtual] =3D mVariableModuleGlobal->Lan= gCodes[Physical]; - EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->LangCodes[Virt= ual]); - - mVariableModuleGlobal->PlatformLang[Virtual] =3D mVariableModuleGlobal->= PlatformLang[Physical]; - EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->PlatformLang[V= irtual]); - - CopyMem ( - mVariableModuleGlobal->VariableName[Virtual], - mVariableModuleGlobal->VariableName[Physical], - sizeof (mVariableModuleGlobal->VariableName[Physical]) - ); - for (Index =3D 0; Index < NUM_VAR_NAME; Index++) { - EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->VariableName= [Virtual][Index]); - } - - mVariableModuleGlobal->GlobalVariableGuid[Virtual] =3D &gEfiGlobalVariab= leGuid; - EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->GlobalVariable= Guid[Virtual]); - - mVariableModuleGlobal->AuthenticatedVariableGuid[Virtual] =3D &gEfiAuthe= nticatedVariableGuid; - EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->AuthenticatedV= ariableGuid[Virtual]); - - mVariableModuleGlobal->CertRsa2048Sha256Guid[Virtual] =3D &gEfiCertRsa20= 48Sha256Guid; - EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->CertRsa2048Sha= 256Guid[Virtual]); - - mVariableModuleGlobal->ImageSecurityDatabaseGuid[Virtual] =3D &gEfiImage= SecurityDatabaseGuid; - EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->ImageSecurityD= atabaseGuid[Virtual]); - - mVariableModuleGlobal->HashContext[Virtual] =3D mVariableModuleGlobal->H= ashContext[Physical]; - EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->HashContext[Vi= rtual]); -} - -/** - Entry point of Extended SAL Variable service module. - - This function is the entry point of Extended SAL Variable service module= . - It registers all functions of Extended SAL Variable class, initializes - variable store for non-volatile and volatile variables, and registers - notification function for EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE event. - - @param[in] ImageHandle The Image handle of this driver. - @param[in] SystemTable The pointer of EFI_SYSTEM_TABLE. - - @retval EFI_SUCCESS Extended SAL Variable Services Class successfu= lly registered. - -**/ -EFI_STATUS -EFIAPI -VariableServiceInitialize ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable - ) -{ - EFI_STATUS Status; - - Status =3D gBS->CreateEventEx ( - EVT_NOTIFY_SIGNAL, - TPL_NOTIFY, - VariableClassAddressChangeEvent, - NULL, - &gEfiEventVirtualAddressChangeGuid, - &mEfiVirtualNotifyEvent - ); - - ASSERT_EFI_ERROR (Status); - - Status =3D VariableCommonInitialize (ImageHandle, SystemTable); - ASSERT_EFI_ERROR (Status); - - // - // Authenticated variable initialize - // - Status =3D AutenticatedVariableServiceInitialize (); - ASSERT_EFI_ERROR (Status); - - FlushHob2Nv (); - - // - // Register All the Functions with Extended SAL Variable Services Class - // - RegisterEsalClass ( - EFI_EXTENDED_SAL_VARIABLE_SERVICES_PROTOCOL_GUID_LO, - EFI_EXTENDED_SAL_VARIABLE_SERVICES_PROTOCOL_GUID_HI, - mVariableModuleGlobal, - EsalVariableCommonEntry, - EsalGetVariableFunctionId, - EsalVariableCommonEntry, - EsalGetNextVariableNameFunctionId, - EsalVariableCommonEntry, - EsalSetVariableFunctionId, - EsalVariableCommonEntry, - EsalQueryVariableInfoFunctionId, - NULL - ); - - return EFI_SUCCESS; -} diff --git a/SecurityPkg/VariableAuthenticated/EsalVariableDxeSal/Reclaim.c= b/SecurityPkg/VariableAuthenticated/EsalVariableDxeSal/Reclaim.c deleted file mode 100644 index 1cbf9ac877..0000000000 --- a/SecurityPkg/VariableAuthenticated/EsalVariableDxeSal/Reclaim.c +++ /dev/null @@ -1,262 +0,0 @@ -/** @file - Handles non-volatile variable store garbage collection, using FTW - (Fault Tolerant Write) protocol. - -Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.
-This program and the accompanying materials=20 -are licensed and made available under the terms and conditions of the BSD = License=20 -which accompanies this distribution. The full text of the license may be = found at=20 -http://opensource.org/licenses/bsd-license.php - -THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,=20 -WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLI= ED. - -**/ - -#include "Variable.h" - -/** - Gets firmware volume block handle by given address. - - This function gets firmware volume block handle whose - address range contains the parameter Address. - - @param[in] Address Address which should be contained - by returned FVB handle. - @param[out] FvbHandle Pointer to FVB handle for output. - - @retval EFI_SUCCESS FVB handle successfully returned. - @retval EFI_NOT_FOUND Failed to find FVB handle by address. - -**/ -EFI_STATUS -GetFvbHandleByAddress ( - IN EFI_PHYSICAL_ADDRESS Address, - OUT EFI_HANDLE *FvbHandle - ) -{ - EFI_STATUS Status; - EFI_HANDLE *HandleBuffer; - UINTN HandleCount; - UINTN Index; - EFI_PHYSICAL_ADDRESS FvbBaseAddress; - EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *Fvb; - EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader; - - *FvbHandle =3D NULL; - // - // Locate all handles with Firmware Volume Block protocol - // - Status =3D gBS->LocateHandleBuffer ( - ByProtocol, - &gEfiFirmwareVolumeBlockProtocolGuid, - NULL, - &HandleCount, - &HandleBuffer - ); - if (EFI_ERROR (Status)) { - return EFI_NOT_FOUND; - } - // - // Traverse all the handles, searching for the one containing parameter = Address - // - for (Index =3D 0; Index < HandleCount; Index +=3D 1) { - Status =3D gBS->HandleProtocol ( - HandleBuffer[Index], - &gEfiFirmwareVolumeBlockProtocolGuid, - (VOID **) &Fvb - ); - if (EFI_ERROR (Status)) { - Status =3D EFI_NOT_FOUND; - break; - } - // - // Checks if the address range of this handle contains parameter Addre= ss - // - Status =3D Fvb->GetPhysicalAddress (Fvb, &FvbBaseAddress); - if (EFI_ERROR (Status)) { - continue; - } - - FwVolHeader =3D (EFI_FIRMWARE_VOLUME_HEADER *) ((UINTN) FvbBaseAddress= ); - if ((Address >=3D FvbBaseAddress) && (Address <=3D (FvbBaseAddress + F= wVolHeader->FvLength))) { - *FvbHandle =3D HandleBuffer[Index]; - Status =3D EFI_SUCCESS; - break; - } - } - - FreePool (HandleBuffer); - return Status; -} - -/** - Gets LBA of block and offset by given address. - - This function gets the Logical Block Address (LBA) of firmware - volume block containing the given address, and the offset of - address on the block. - - @param[in] Address Address which should be contained - by returned FVB handle. - @param[out] Lba The pointer to LBA for output. - @param[out] Offset The pointer to offset for output. - - @retval EFI_SUCCESS LBA and offset successfully returned. - @retval EFI_NOT_FOUND Failed to find FVB handle by address. - @retval EFI_ABORTED Failed to find valid LBA and offset. - -**/ -EFI_STATUS -GetLbaAndOffsetByAddress ( - IN EFI_PHYSICAL_ADDRESS Address, - OUT EFI_LBA *Lba, - OUT UINTN *Offset - ) -{ - EFI_STATUS Status; - EFI_HANDLE FvbHandle; - EFI_PHYSICAL_ADDRESS FvbBaseAddress; - EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *Fvb; - EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader; - EFI_FV_BLOCK_MAP_ENTRY *FvbMapEntry; - UINT32 LbaIndex; - - *Lba =3D (EFI_LBA) (-1); - *Offset =3D 0; - - // - // Gets firmware volume block handle by given address. - // - Status =3D GetFvbHandleByAddress (Address, &FvbHandle); - if (EFI_ERROR (Status)) { - return Status; - } - - Status =3D gBS->HandleProtocol ( - FvbHandle, - &gEfiFirmwareVolumeBlockProtocolGuid, - (VOID **) &Fvb - ); - if (EFI_ERROR (Status)) { - return Status; - } - // - // Get the Base Address of FV - // - Status =3D Fvb->GetPhysicalAddress (Fvb, &FvbBaseAddress); - if (EFI_ERROR (Status)) { - return Status; - } - - FwVolHeader =3D (EFI_FIRMWARE_VOLUME_HEADER *) ((UINTN) FvbBaseAddress); - - // - // Get the (LBA, Offset) of Address - // - if ((Address >=3D FvbBaseAddress) && (Address <=3D (FvbBaseAddress + FwV= olHeader->FvLength))) { - if ((FwVolHeader->FvLength) > (FwVolHeader->HeaderLength)) { - // - // BUGBUG: Assume one FV has one type of BlockLength - // - FvbMapEntry =3D &FwVolHeader->BlockMap[0]; - for (LbaIndex =3D 1; LbaIndex <=3D FvbMapEntry->NumBlocks; LbaIndex = +=3D 1) { - if (Address < (FvbBaseAddress + FvbMapEntry->Length * LbaIndex)) { - // - // Found the (Lba, Offset) - // - *Lba =3D LbaIndex - 1; - *Offset =3D (UINTN) (Address - (FvbBaseAddress + FvbMapEntry->Le= ngth * (LbaIndex - 1))); - return EFI_SUCCESS; - } - } - } - } - - return EFI_ABORTED; -} - -/** - Writes a buffer to variable storage space. - - This function writes a buffer to variable storage space into firmware - volume block device. The destination is specified by parameter - VariableBase. Fault Tolerant Write protocol is used for writing. - - @param[in] VariableBase The base address of the variable to write. - @param[in] Buffer Points to the data buffer. - @param[in] BufferSize The number of bytes of the data Buffer. - - @retval EFI_SUCCESS The function completed successfully. - @retval EFI_NOT_FOUND Fail to locate Fault Tolerant Write protocol. - @retval Other The function could not complete successfully. - -**/ -EFI_STATUS -FtwVariableSpace ( - IN EFI_PHYSICAL_ADDRESS VariableBase, - IN UINT8 *Buffer, - IN UINTN BufferSize - ) -{ - EFI_STATUS Status; - EFI_HANDLE FvbHandle; - EFI_LBA VarLba; - UINTN VarOffset; - UINT8 *FtwBuffer; - UINTN FtwBufferSize; - EFI_FAULT_TOLERANT_WRITE_PROTOCOL *FtwProtocol; - - // - // Locate Fault Tolerant Write protocol - // - Status =3D gBS->LocateProtocol ( - &gEfiFaultTolerantWriteProtocolGuid, - NULL, - (VOID **) &FtwProtocol - ); - if (EFI_ERROR (Status)) { - return EFI_NOT_FOUND; - } - // - // Gets firmware volume block handle by VariableBase. - // - Status =3D GetFvbHandleByAddress (VariableBase, &FvbHandle); - if (EFI_ERROR (Status)) { - return Status; - } - // - // Gets LBA of block and offset by VariableBase. - // - Status =3D GetLbaAndOffsetByAddress (VariableBase, &VarLba, &VarOffset); - if (EFI_ERROR (Status)) { - return EFI_ABORTED; - } - // - // Prepare for the variable data - // - FtwBufferSize =3D ((VARIABLE_STORE_HEADER *) ((UINTN) VariableBase))->Si= ze; - FtwBuffer =3D AllocatePool (FtwBufferSize); - if (FtwBuffer =3D=3D NULL) { - return EFI_OUT_OF_RESOURCES; - } - - SetMem (FtwBuffer, FtwBufferSize, (UINT8) 0xff); - CopyMem (FtwBuffer, Buffer, BufferSize); - - // - // FTW write record - // - Status =3D FtwProtocol->Write ( - FtwProtocol, - VarLba, // LBA - VarOffset, // Offset - FtwBufferSize, // NumBytes, - NULL, - FvbHandle, - FtwBuffer - ); - - FreePool (FtwBuffer); - return Status; -} diff --git a/SecurityPkg/VariableAuthenticated/EsalVariableDxeSal/Variable.= c b/SecurityPkg/VariableAuthenticated/EsalVariableDxeSal/Variable.c deleted file mode 100644 index dfa85973f4..0000000000 --- a/SecurityPkg/VariableAuthenticated/EsalVariableDxeSal/Variable.c +++ /dev/null @@ -1,3257 +0,0 @@ -/** @file - The implementation of Extended SAL variable services. - -Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.
-This program and the accompanying materials=20 -are licensed and made available under the terms and conditions of the BSD = License=20 -which accompanies this distribution. The full text of the license may be = found at=20 -http://opensource.org/licenses/bsd-license.php - -THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,=20 -WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLI= ED. - -**/ - -#include "Variable.h" -#include "AuthService.h" - -// -// Don't use module globals after the SetVirtualAddress map is signaled -// -ESAL_VARIABLE_GLOBAL *mVariableModuleGlobal; -CHAR16 *mVariableName[NUM_VAR_NAME] =3D { - L"PlatformLangCodes", - L"LangCodes", - L"PlatformLang", - L"Lang", - L"HwErrRec", - AUTHVAR_KEYDB_NAME, - EFI_SETUP_MODE_NAME, - EFI_PLATFORM_KEY_NAME, - EFI_KEY_EXCHANGE_KEY_NAME -}; - -GLOBAL_REMOVE_IF_UNREFERENCED VARIABLE_INFO_ENTRY *gVariableInfo =3D NULL; - -// -// The current Hii implementation accesses this variable a larg # of times= on every boot. -// Other common variables are only accessed a single time. This is why thi= s cache algorithm -// only targets a single variable. Probably to get an performance improvem= ent out of -// a Cache you would need a cache that improves the search performance for= a variable. -// -VARIABLE_CACHE_ENTRY mVariableCache[] =3D { - { - &gEfiGlobalVariableGuid, - L"Lang", - 0x00000000, - 0x00, - NULL - }, - { - &gEfiGlobalVariableGuid, - L"PlatformLang", - 0x00000000, - 0x00, - NULL - } -}; - -/** - Acquires lock only at boot time. Simply returns at runtime. - - This is a temperary function which will be removed when - EfiAcquireLock() in UefiLib can handle the call in UEFI - Runtimer driver in RT phase. - It calls EfiAcquireLock() at boot time, and simply returns - at runtime. - - @param[in] Lock A pointer to the lock to acquire. - -**/ -VOID -AcquireLockOnlyAtBootTime ( - IN EFI_LOCK *Lock - ) -{ - if (!EfiAtRuntime ()) { - EfiAcquireLock (Lock); - } -} - -/** - Releases lock only at boot time. Simply returns at runtime. - - This is a temperary function which will be removed when - EfiReleaseLock() in UefiLib can handle the call in UEFI - Runtimer driver in RT phase. - It calls EfiReleaseLock() at boot time, and simply returns - at runtime - - @param[in] Lock A pointer to the lock to release. - -**/ -VOID -ReleaseLockOnlyAtBootTime ( - IN EFI_LOCK *Lock - ) -{ - if (!EfiAtRuntime ()) { - EfiReleaseLock (Lock); - } -} - -/** - Reads/Writes variable storage, volatile or non-volatile. - - This function reads or writes volatile or non-volatile variable stroage. - For volatile storage, it performs memory copy. - For non-volatile storage, it accesses data on firmware storage. Data - area to access can span multiple firmware blocks. - - @param[in] Write TRUE - Write variable store. - FALSE - Read variable store. - @param[in] Global Pointer to VARAIBLE_GLOBAL structure. - @param[in] Volatile TRUE - Variable is volatile. - FALSE - Variable is non-volatile. - @param[in] Instance Instance of FV Block services. - @param[in] StartAddress Start address of data to access. - @param[in] DataSize Size of data to access. - @param[in, out] Buffer For write, pointer to the buffer from wh= ich data is written. - For read, pointer to the buffer to hold = the data read. - - @retval EFI_SUCCESS Variable store successfully accessed. - @retval EFI_INVALID_PARAMETER Data area to access exceeds valid variabl= e storage. - -**/ -EFI_STATUS -AccessVariableStore ( - IN BOOLEAN Write, - IN VARIABLE_GLOBAL *Global, - IN BOOLEAN Volatile, - IN UINTN Instance, - IN EFI_PHYSICAL_ADDRESS StartAddress, - IN UINT32 DataSize, - IN OUT VOID *Buffer - ) -{ - EFI_FV_BLOCK_MAP_ENTRY *PtrBlockMapEntry; - UINTN BlockIndex; - UINTN LinearOffset; - UINTN CurrWriteSize; - UINTN CurrWritePtr; - UINT8 *CurrBuffer; - EFI_LBA LbaNumber; - UINTN Size; - EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader; - VARIABLE_STORE_HEADER *VolatileBase; - EFI_PHYSICAL_ADDRESS FvVolHdr; - EFI_STATUS Status; - VARIABLE_STORE_HEADER *VariableStoreHeader; - - FvVolHdr =3D 0; - FwVolHeader =3D NULL; - - if (Volatile) { - // - // If data is volatile, simply calculate the data pointer and copy mem= ory. - // Data pointer should point to the actual address where data is to be - // accessed. - // - VolatileBase =3D (VARIABLE_STORE_HEADER *) ((UINTN) Global->VolatileVa= riableBase); - - if ((StartAddress + DataSize) > ((UINTN) ((UINT8 *) VolatileBase + Vol= atileBase->Size))) { - return EFI_INVALID_PARAMETER; - } - =20 - // - // For volatile variable, a simple memory copy is enough. - // - if (Write) { - CopyMem ((VOID *) StartAddress, Buffer, DataSize); - } else { - CopyMem (Buffer, (VOID *) StartAddress, DataSize); - } - - return EFI_SUCCESS; - } - - // - // If data is non-volatile, calculate firmware volume header and data po= inter. - // - Status =3D (EFI_STATUS) EsalCall ( - EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL_GUID= _LO, - EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL_GUID= _HI, - GetPhysicalAddressFunctionId,=20 - Instance,=20 - (UINT64) &FvVolHdr,=20 - 0,=20 - 0,=20 - 0,=20 - 0,=20 - 0 - ).Status; - ASSERT_EFI_ERROR (Status); - - FwVolHeader =3D (EFI_FIRMWARE_VOLUME_HEADER *) ((UINTN) FvVolHdr); - ASSERT (FwVolHeader !=3D NULL); - VariableStoreHeader =3D (VARIABLE_STORE_HEADER *)(FwVolHeader + 1); - - if ((StartAddress + DataSize) > ((EFI_PHYSICAL_ADDRESS) (UINTN) ((CHAR8 = *)VariableStoreHeader + VariableStoreHeader->Size))) { - return EFI_INVALID_PARAMETER; - } - =20 - LinearOffset =3D (UINTN) FwVolHeader; - CurrWritePtr =3D StartAddress; - CurrWriteSize =3D DataSize; - CurrBuffer =3D Buffer; - LbaNumber =3D 0; - - if (CurrWritePtr < LinearOffset) { - return EFI_INVALID_PARAMETER; - } - - // - // Traverse data blocks of this firmware storage to find the one where C= urrWritePtr locates - // - for (PtrBlockMapEntry =3D FwVolHeader->BlockMap; PtrBlockMapEntry->NumBl= ocks !=3D 0; PtrBlockMapEntry++) { - for (BlockIndex =3D 0; BlockIndex < PtrBlockMapEntry->NumBlocks; Block= Index++) { - if ((CurrWritePtr >=3D LinearOffset) && (CurrWritePtr < LinearOffset= + PtrBlockMapEntry->Length)) { - // - // Check to see if the data area to access spans multiple blocks. - // - if ((CurrWritePtr + CurrWriteSize) <=3D (LinearOffset + PtrBlockMa= pEntry->Length)) { - // - // If data area to access is contained in one block, just access= and return. - // - if (Write) { - Status =3D (EFI_STATUS) EsalCall ( - EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PRO= TOCOL_GUID_LO, - EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PRO= TOCOL_GUID_HI, - WriteFunctionId,=20 - Instance,=20 - LbaNumber,=20 - (CurrWritePtr - LinearOffset),=20 - (UINT64) &CurrWriteSize,=20 - (UINT64) CurrBuffer,=20 - 0,=20 - 0 - ).Status; - } else { - Status =3D (EFI_STATUS) EsalCall ( - EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PRO= TOCOL_GUID_LO, - EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PRO= TOCOL_GUID_HI, - ReadFunctionId,=20 - Instance,=20 - LbaNumber,=20 - (CurrWritePtr - LinearOffset),=20 - (UINT64) &CurrWriteSize,=20 - (UINT64) CurrBuffer,=20 - 0,=20 - 0 - ).Status; - } - return Status; - } else { - // - // If data area to access spans multiple blocks, access this one= and adjust for the next one. - // - Size =3D (UINT32) (LinearOffset + PtrBlockMapEntry->Length - Cur= rWritePtr); - if (Write) { - Status =3D (EFI_STATUS) EsalCall ( - EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PRO= TOCOL_GUID_LO, - EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PRO= TOCOL_GUID_HI, - WriteFunctionId,=20 - Instance,=20 - LbaNumber,=20 - (CurrWritePtr - LinearOffset),=20 - (UINT64) &Size,=20 - (UINT64) CurrBuffer,=20 - 0,=20 - 0 - ).Status; - } else { - Status =3D (EFI_STATUS) EsalCall ( - EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PRO= TOCOL_GUID_LO, - EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PRO= TOCOL_GUID_HI, - ReadFunctionId,=20 - Instance,=20 - LbaNumber,=20 - (CurrWritePtr - LinearOffset),=20 - (UINT64) &Size,=20 - (UINT64) CurrBuffer,=20 - 0,=20 - 0 - ).Status; - } - if (EFI_ERROR (Status)) { - return Status; - } - // - // Adjust for the remaining data. - // - CurrWritePtr =3D LinearOffset + PtrBlockMapEntry->Length; - CurrBuffer =3D CurrBuffer + Size; - CurrWriteSize =3D CurrWriteSize - Size; - } - } - - LinearOffset +=3D PtrBlockMapEntry->Length; - LbaNumber++; - } - } - - return EFI_SUCCESS; -} - -/** - Retrieves header of volatile or non-volatile variable stroage. - - @param[in] VarStoreAddress Start address of variable storage. - @param[in] Volatile TRUE - Variable storage is volatile. - FALSE - Variable storage is non-volatile. - @param[in] Global Pointer to VARAIBLE_GLOBAL structure. - @param[in] Instance Instance of FV Block services. - @param[out] VarStoreHeader Pointer to VARIABLE_STORE_HEADER for outp= ut. - -**/ -VOID -GetVarStoreHeader ( - IN EFI_PHYSICAL_ADDRESS VarStoreAddress, - IN BOOLEAN Volatile, - IN VARIABLE_GLOBAL *Global, - IN UINTN Instance, - OUT VARIABLE_STORE_HEADER *VarStoreHeader - ) -{ - EFI_STATUS Status; - - Status =3D AccessVariableStore ( - FALSE, - Global, - Volatile, - Instance, - VarStoreAddress, - sizeof (VARIABLE_STORE_HEADER), - VarStoreHeader =20 - ); - ASSERT_EFI_ERROR (Status); -} - -/** - Checks variable header. - - This function checks if variable header is valid or not. - - @param[in] VariableAddress Start address of variable header. - @param[in] Volatile TRUE - Variable is volatile. - FALSE - Variable is non-volatile. - @param[in] Global Pointer to VARAIBLE_GLOBAL structure. - @param[in] Instance Instance of FV Block services. - @param[out] VariableHeader Pointer to AUTHENTICATED_VARIABLE_HEADER = for output. - - @retval TRUE Variable header is valid. - @retval FALSE Variable header is not valid. - -**/ -BOOLEAN -IsValidVariableHeader ( - IN EFI_PHYSICAL_ADDRESS VariableAddress, - IN BOOLEAN Volatile, - IN VARIABLE_GLOBAL *Global, - IN UINTN Instance, - OUT AUTHENTICATED_VARIABLE_HEADER *VariableHeader OPTIONAL - ) -{ - EFI_STATUS Status; - AUTHENTICATED_VARIABLE_HEADER LocalVariableHeader; - - Status =3D AccessVariableStore ( - FALSE, - Global, - Volatile, - Instance, - VariableAddress, - sizeof (AUTHENTICATED_VARIABLE_HEADER), - &LocalVariableHeader =20 - ); - - if (EFI_ERROR (Status) || LocalVariableHeader.StartId !=3D VARIABLE_DATA= ) { - return FALSE; - } - - if (VariableHeader !=3D NULL) { - CopyMem (VariableHeader, &LocalVariableHeader, sizeof (AUTHENTICATED_V= ARIABLE_HEADER)); - } - - return TRUE; -} - -/** - Gets status of variable store. - - This function gets the current status of variable store. - - @param[in] VarStoreHeader Pointer to header of variable store. - - @retval EfiRaw Variable store status is raw. - @retval EfiValid Variable store status is valid. - @retval EfiInvalid Variable store status is invalid. - -**/ -VARIABLE_STORE_STATUS -GetVariableStoreStatus ( - IN VARIABLE_STORE_HEADER *VarStoreHeader - ) -{ - - if (CompareGuid (&VarStoreHeader->Signature, &gEfiAuthenticatedVariableG= uid) && - VarStoreHeader->Format =3D=3D VARIABLE_STORE_FORMATTED && - VarStoreHeader->State =3D=3D VARIABLE_STORE_HEALTHY - ) { - - return EfiValid; - } else if (((UINT32 *)(&VarStoreHeader->Signature))[0] =3D=3D 0xffffffff= && - ((UINT32 *)(&VarStoreHeader->Signature))[1] =3D=3D 0xffffffff= && - ((UINT32 *)(&VarStoreHeader->Signature))[2] =3D=3D 0xffffffff= && - ((UINT32 *)(&VarStoreHeader->Signature))[3] =3D=3D 0xffffffff= && - VarStoreHeader->Size =3D=3D 0xffffffff && - VarStoreHeader->Format =3D=3D 0xff && - VarStoreHeader->State =3D=3D 0xff - ) { - - return EfiRaw; - } else { - return EfiInvalid; - } -} - -/** - Gets the size of variable name. - - This function gets the size of variable name. - The variable is specified by its variable header. - If variable header contains raw data, just return 0. - - @param[in] Variable Pointer to the variable header. - - @return Size of variable name in bytes. - -**/ -UINTN -NameSizeOfVariable ( - IN AUTHENTICATED_VARIABLE_HEADER *Variable - ) -{ - if (Variable->State =3D=3D (UINT8) (-1) || - Variable->DataSize =3D=3D (UINT32) -1 || - Variable->NameSize =3D=3D (UINT32) -1 || - Variable->Attributes =3D=3D (UINT32) -1) { - return 0; - } - return (UINTN) Variable->NameSize; -} - -/** - Gets the size of variable data area. - - This function gets the size of variable data area. - The variable is specified by its variable header. - If variable header contains raw data, just return 0. - - @param[in] Variable Pointer to the variable header. - - @return Size of variable data area in bytes. - -**/ -UINTN -DataSizeOfVariable ( - IN AUTHENTICATED_VARIABLE_HEADER *Variable - ) -{ - if (Variable->State =3D=3D (UINT8) -1 || - Variable->DataSize =3D=3D (UINT32) -1 || - Variable->NameSize =3D=3D (UINT32) -1 || - Variable->Attributes =3D=3D (UINT32) -1) { - return 0; - } - return (UINTN) Variable->DataSize; -} - -/** - Gets the pointer to variable name. - - This function gets the pointer to variable name. - The variable is specified by its variable header. - - @param[in] VariableAddress Start address of variable header. - @param[in] Volatile TRUE - Variable is volatile. - FALSE - Variable is non-volatile. - @param[in] Global Pointer to VARAIBLE_GLOBAL structure. - @param[in] Instance Instance of FV Block services. - @param[out] VariableName Buffer to hold variable name for output. - -**/ -VOID -GetVariableNamePtr ( - IN EFI_PHYSICAL_ADDRESS VariableAddress, - IN BOOLEAN Volatile, - IN VARIABLE_GLOBAL *Global, - IN UINTN Instance, - OUT CHAR16 *VariableName - ) -{ - EFI_STATUS Status; - EFI_PHYSICAL_ADDRESS Address; - AUTHENTICATED_VARIABLE_HEADER VariableHeader; - BOOLEAN IsValid; - - IsValid =3D IsValidVariableHeader (VariableAddress, Volatile, Global, In= stance, &VariableHeader); - ASSERT (IsValid); - - // - // Name area follows variable header. - // - Address =3D VariableAddress + sizeof (AUTHENTICATED_VARIABLE_HEADER); - - Status =3D AccessVariableStore ( - FALSE, - Global, - Volatile, - Instance, - Address, - VariableHeader.NameSize, - VariableName =20 - ); - ASSERT_EFI_ERROR (Status); -} - -/** - Gets the pointer to variable data area. - - This function gets the pointer to variable data area. - The variable is specified by its variable header. - - @param[in] VariableAddress Start address of variable header. - @param[in] Volatile TRUE - Variable is volatile. - FALSE - Variable is non-volatile. - @param[in] Global Pointer to VARAIBLE_GLOBAL structure. - @param[in] Instance Instance of FV Block services. - @param[out] VariableData Buffer to hold variable data for output. - -**/ -VOID -GetVariableDataPtr ( - IN EFI_PHYSICAL_ADDRESS VariableAddress, - IN BOOLEAN Volatile, - IN VARIABLE_GLOBAL *Global, - IN UINTN Instance, - OUT CHAR16 *VariableData - ) -{ - EFI_STATUS Status; - EFI_PHYSICAL_ADDRESS Address; - AUTHENTICATED_VARIABLE_HEADER VariableHeader; - BOOLEAN IsValid; - - IsValid =3D IsValidVariableHeader (VariableAddress, Volatile, Global, In= stance, &VariableHeader); - ASSERT (IsValid); - - // - // Data area follows variable name. - // Be careful about pad size for alignment - // - Address =3D VariableAddress + sizeof (AUTHENTICATED_VARIABLE_HEADER); - Address +=3D NameSizeOfVariable (&VariableHeader); - Address +=3D GET_PAD_SIZE (NameSizeOfVariable (&VariableHeader)); - - Status =3D AccessVariableStore ( - FALSE, - Global, - Volatile, - Instance, - Address, - VariableHeader.DataSize, - VariableData =20 - ); - ASSERT_EFI_ERROR (Status); -} - - -/** - Gets the pointer to the next variable header. - - This function gets the pointer to the next variable header. - The variable is specified by its variable header. - - @param[in] VariableAddress Start address of variable header. - @param[in] Volatile TRUE - Variable is volatile. - FALSE - Variable is non-volatile. - @param[in] Global Pointer to VARAIBLE_GLOBAL structure. - @param[in] Instance Instance of FV Block services. - - @return Pointer to the next variable header. - NULL if variable header is invalid. - -**/ -EFI_PHYSICAL_ADDRESS -GetNextVariablePtr ( - IN EFI_PHYSICAL_ADDRESS VariableAddress, - IN BOOLEAN Volatile, - IN VARIABLE_GLOBAL *Global, - IN UINTN Instance - ) -{ - EFI_PHYSICAL_ADDRESS Address; - AUTHENTICATED_VARIABLE_HEADER VariableHeader; - - if (!IsValidVariableHeader (VariableAddress, Volatile, Global, Instance,= &VariableHeader)) { - return 0x0; - } - - // - // Header of next variable follows data area of this variable - // - Address =3D VariableAddress + sizeof (AUTHENTICATED_VARIABLE_HEADER); - Address +=3D NameSizeOfVariable (&VariableHeader); - Address +=3D GET_PAD_SIZE (NameSizeOfVariable (&VariableHeader)); - Address +=3D DataSizeOfVariable (&VariableHeader); - Address +=3D GET_PAD_SIZE (DataSizeOfVariable (&VariableHeader)); - - // - // Be careful about pad size for alignment - // - return HEADER_ALIGN (Address); -} - -/** - Gets the pointer to the first variable header in given variable store ar= ea. - - This function gets the pointer to the first variable header in given var= iable=20 - store area. The variable store area is given by its start address. - - @param[in] VarStoreHeaderAddress Pointer to the header of variable stor= e area. - - @return Pointer to the first variable header. - -**/ -EFI_PHYSICAL_ADDRESS -GetStartPointer ( - IN EFI_PHYSICAL_ADDRESS VarStoreHeaderAddress - ) -{ - return HEADER_ALIGN (VarStoreHeaderAddress + sizeof (VARIABLE_STORE_HEAD= ER)); -} - -/** - Gets the pointer to the end of given variable store area. - - This function gets the pointer to the end of given variable store area. - The variable store area is given by its start address. - - @param[in] VarStoreHeaderAddress Pointer to the header of variable sto= re area. - @param[in] Volatile TRUE - Variable is volatile. - FALSE - Variable is non-volatile. - @param[in] Global Pointer to VARAIBLE_GLOBAL structure. - @param[in] Instance Instance of FV Block services. - - @return Pointer to the end of given variable = store area. - -**/ -EFI_PHYSICAL_ADDRESS -GetEndPointer ( - IN EFI_PHYSICAL_ADDRESS VarStoreHeaderAddress, - IN BOOLEAN Volatile, - IN VARIABLE_GLOBAL *Global, - IN UINTN Instance - ) -{ - EFI_STATUS Status; - VARIABLE_STORE_HEADER VariableStoreHeader; - - Status =3D AccessVariableStore ( - FALSE, - Global, - Volatile, - Instance, - VarStoreHeaderAddress, - sizeof (VARIABLE_STORE_HEADER), - &VariableStoreHeader =20 - ); - - ASSERT_EFI_ERROR (Status); - return HEADER_ALIGN (VarStoreHeaderAddress + VariableStoreHeader.Size); -} - -/** - Updates variable info entry in EFI system table for statistical informat= ion. - - Routine used to track statistical information about variable usage.=20 - The data is stored in the EFI system table so it can be accessed later. - VariableInfo.efi can dump out the table. Only Boot Services variable=20 - accesses are tracked by this code. The PcdVariableCollectStatistics - build flag controls if this feature is enabled.=20 - A read that hits in the cache will have Read and Cache true for=20 - the transaction. Data is allocated by this routine, but never - freed. - - @param[in] VariableName Name of the Variable to track. - @param[in] VendorGuid Guid of the Variable to track. - @param[in] Volatile TRUE if volatile FALSE if non-volatile. - @param[in] Read TRUE if GetVariable() was called. - @param[in] Write TRUE if SetVariable() was called. - @param[in] Delete TRUE if deleted via SetVariable(). - @param[in] Cache TRUE for a cache hit. - -**/ -VOID -UpdateVariableInfo ( - IN CHAR16 *VariableName, - IN EFI_GUID *VendorGuid, - IN BOOLEAN Volatile, - IN BOOLEAN Read, - IN BOOLEAN Write, - IN BOOLEAN Delete, - IN BOOLEAN Cache - ) -{ - VARIABLE_INFO_ENTRY *Entry; - - if (FeaturePcdGet (PcdVariableCollectStatistics)) { - - if (EfiAtRuntime ()) { - // - // Don't collect statistics at runtime - // - return; - } - - if (gVariableInfo =3D=3D NULL) { - // - // on the first call allocate a entry and place a pointer to it in - // the EFI System Table - // - gVariableInfo =3D AllocateZeroPool (sizeof (VARIABLE_INFO_ENTRY)); - ASSERT (gVariableInfo !=3D NULL); - - CopyGuid (&gVariableInfo->VendorGuid, VendorGuid); - gVariableInfo->Name =3D AllocatePool (StrSize (VariableName)); - ASSERT (gVariableInfo->Name !=3D NULL); - StrCpyS (gVariableInfo->Name, StrSize (VariableName) / sizeof (CHAR1= 6), VariableName); - gVariableInfo->Volatile =3D Volatile; - - gBS->InstallConfigurationTable (&gEfiAuthenticatedVariableGuid, gVar= iableInfo); - } - - =20 - for (Entry =3D gVariableInfo; Entry !=3D NULL; Entry =3D Entry->Next) = { - if (CompareGuid (VendorGuid, &Entry->VendorGuid)) { - if (StrCmp (VariableName, Entry->Name) =3D=3D 0) { - // - // Find the entry matching both variable name and vender GUID, - // and update counters for all types. - // - if (Read) { - Entry->ReadCount++; - } - if (Write) { - Entry->WriteCount++; - } - if (Delete) { - Entry->DeleteCount++; - } - if (Cache) { - Entry->CacheCount++; - } - - return; - } - } - - if (Entry->Next =3D=3D NULL) { - // - // If the entry is not in the table add it. - // Next iteration of the loop will fill in the data - // - Entry->Next =3D AllocateZeroPool (sizeof (VARIABLE_INFO_ENTRY)); - ASSERT (Entry->Next !=3D NULL); - - CopyGuid (&Entry->Next->VendorGuid, VendorGuid); - Entry->Next->Name =3D AllocatePool (StrSize (VariableName)); - ASSERT (Entry->Next->Name !=3D NULL); - StrCpyS (Entry->Next->Name, StrSize (VariableName) / sizeof (CHAR1= 6), VariableName); - Entry->Next->Volatile =3D Volatile; - } - - } - } -} - -/** - Updates variable in cache. - - This function searches the variable cache. If the variable to set exists= in the cache, - it updates the variable in cache. It has the same parameters with UEFI S= etVariable() - service. - - @param[in] VariableName A Null-terminated Unicode string that is the n= ame of the vendor's - variable. Each VariableName is unique for eac= h VendorGuid. - @param[in] VendorGuid A unique identifier for the vendor. - @param[in] Attributes Attributes bitmask to set for the variable. - @param[in] DataSize The size in bytes of the Data buffer. A size = of zero causes the - variable to be deleted. - @param[in] Data The contents for the variable. - -**/ -VOID -UpdateVariableCache ( - IN CHAR16 *VariableName, - IN EFI_GUID *VendorGuid, - IN UINT32 Attributes, - IN UINTN DataSize, - IN VOID *Data - ) -{ - VARIABLE_CACHE_ENTRY *Entry; - UINTN Index; - - if (EfiAtRuntime ()) { - // - // Don't use the cache at runtime - // - return; - } - - // - // Searches cache for the variable to update. If it exists, update it. - // - for (Index =3D 0, Entry =3D mVariableCache; Index < sizeof (mVariableCac= he)/sizeof (VARIABLE_CACHE_ENTRY); Index++, Entry++) { - if (CompareGuid (VendorGuid, Entry->Guid)) { - if (StrCmp (VariableName, Entry->Name) =3D=3D 0) {=20 - Entry->Attributes =3D Attributes; - if (DataSize =3D=3D 0) { - // - // If DataSize is 0, delete the variable. - // - if (Entry->DataSize !=3D 0) { - FreePool (Entry->Data); - } - Entry->DataSize =3D DataSize; - } else if (DataSize =3D=3D Entry->DataSize) { - // - // If size of data does not change, simply copy data - // - CopyMem (Entry->Data, Data, DataSize); - } else { - // - // If size of data changes, allocate pool and copy data. - // - Entry->Data =3D AllocatePool (DataSize); - ASSERT (Entry->Data !=3D NULL); - Entry->DataSize =3D DataSize; - CopyMem (Entry->Data, Data, DataSize); - } - } - } - } -} - - -/** - Search the cache to check if the variable is in it. - - This function searches the variable cache. If the variable to find exist= s, return its data - and attributes. - - @param[in] VariableName A Null-terminated Unicode string that is = the name of the vendor's - variable. Each VariableName is unique fo= r each VendorGuid. - @param[in] VendorGuid A unique identifier for the vendor - @param[out] Attributes Pointer to the attributes bitmask of the = variable for output. - @param[in, out] DataSize On input, size of the buffer of Data. - On output, size of the variable's data. - @param[out] Data Pointer to the data buffer for output. - - @retval EFI_SUCCESS VariableGuid & VariableName data was retur= ned. - @retval EFI_NOT_FOUND No matching variable found in cache. - @retval EFI_BUFFER_TOO_SMALL *DataSize is smaller than size of the vari= able's data to return. - -**/ -EFI_STATUS -FindVariableInCache ( - IN CHAR16 *VariableName, - IN EFI_GUID *VendorGuid, - OUT UINT32 *Attributes OPTIONAL, - IN OUT UINTN *DataSize, - OUT VOID *Data - ) -{ - VARIABLE_CACHE_ENTRY *Entry; - UINTN Index; - - if (EfiAtRuntime ()) { - // - // Don't use the cache at runtime - // - return EFI_NOT_FOUND; - } - - // - // Searches cache for the variable - // - for (Index =3D 0, Entry =3D mVariableCache; Index < sizeof (mVariableCac= he)/sizeof (VARIABLE_CACHE_ENTRY); Index++, Entry++) { - if (CompareGuid (VendorGuid, Entry->Guid)) { - if (StrCmp (VariableName, Entry->Name) =3D=3D 0) { - if (Entry->DataSize =3D=3D 0) { - // - // Variable has been deleted so return EFI_NOT_FOUND - // - return EFI_NOT_FOUND; - } else if (Entry->DataSize > *DataSize) { - // - // If buffer is too small, return the size needed and EFI_BUFFER= _TOO_SMALL - // - *DataSize =3D Entry->DataSize; - return EFI_BUFFER_TOO_SMALL; - } else { - // - // If buffer is large enough, return the data - // - *DataSize =3D Entry->DataSize; - CopyMem (Data, Entry->Data, Entry->DataSize); - // - // If Attributes is not NULL, return the variable's attribute. - // - if (Attributes !=3D NULL) { - *Attributes =3D Entry->Attributes; - } - return EFI_SUCCESS; - } - } - } - } - =20 - return EFI_NOT_FOUND; -} - -/** - Finds variable in volatile and non-volatile storage areas. - - This code finds variable in volatile and non-volatile storage areas. - If VariableName is an empty string, then we just return the first - qualified variable without comparing VariableName and VendorGuid. - Otherwise, VariableName and VendorGuid are compared. - - @param[in] VariableName Name of the variable to be found. - @param[in] VendorGuid Vendor GUID to be found. - @param[out] PtrTrack VARIABLE_POINTER_TRACK structure for= output, - including the range searched and the= target position. - @param[in] Global Pointer to VARIABLE_GLOBAL structure= , including - base of volatile variable storage ar= ea, base of - NV variable storage area, and a lock= . - @param[in] Instance Instance of FV Block services. - - @retval EFI_INVALID_PARAMETER If VariableName is not an empty stri= ng, while - VendorGuid is NULL. - @retval EFI_SUCCESS Variable successfully found. - @retval EFI_INVALID_PARAMETER Variable not found. - -**/ -EFI_STATUS -FindVariable ( - IN CHAR16 *VariableName, - IN EFI_GUID *VendorGuid, - OUT VARIABLE_POINTER_TRACK *PtrTrack, - IN VARIABLE_GLOBAL *Global, - IN UINTN Instance - ) -{ - EFI_PHYSICAL_ADDRESS Variable[2]; - EFI_PHYSICAL_ADDRESS InDeletedVariable; - EFI_PHYSICAL_ADDRESS VariableStoreHeader[2]; - UINTN InDeletedStorageIndex; - UINTN Index; - CHAR16 LocalVariableName[MAX_NAME_SIZE]; - BOOLEAN Volatile; - AUTHENTICATED_VARIABLE_HEADER VariableHeader; - - // - // 0: Volatile, 1: Non-Volatile - // The index and attributes mapping must be kept in this order as Runtim= eServiceGetNextVariableName - // make use of this mapping to implement search algorithme. - // - VariableStoreHeader[0] =3D Global->VolatileVariableBase; - VariableStoreHeader[1] =3D Global->NonVolatileVariableBase; - - // - // Start Pointers for the variable. - // Actual Data Pointer where data can be written. - // - Variable[0] =3D GetStartPointer (VariableStoreHeader[0]); - Variable[1] =3D GetStartPointer (VariableStoreHeader[1]); - - if (VariableName[0] !=3D 0 && VendorGuid =3D=3D NULL) { - return EFI_INVALID_PARAMETER; - } - - // - // Find the variable by walk through volatile and then non-volatile vari= able store - // - InDeletedVariable =3D 0x0; - InDeletedStorageIndex =3D 0; - Volatile =3D TRUE; - for (Index =3D 0; Index < 2; Index++) { - if (Index =3D=3D 1) { - Volatile =3D FALSE; - } - while (IsValidVariableHeader (Variable[Index], Volatile, Global, Insta= nce, &VariableHeader)) { - if (VariableHeader.State =3D=3D VAR_ADDED ||=20 - VariableHeader.State =3D=3D (VAR_IN_DELETED_TRANSITION & VAR_ADD= ED) - ) { - if (!EfiAtRuntime () || ((VariableHeader.Attributes & EFI_VARIABLE= _RUNTIME_ACCESS) !=3D 0)) { - if (VariableName[0] =3D=3D 0) { - // - // If VariableName is an empty string, then we just find the f= irst qualified variable - // without comparing VariableName and VendorGuid - // - if (VariableHeader.State =3D=3D (VAR_IN_DELETED_TRANSITION & V= AR_ADDED)) { - // - // If variable is in delete transition, record it. - // - InDeletedVariable =3D Variable[Index]; - InDeletedStorageIndex =3D Index; - } else { - // - // If variable is not in delete transition, return it. - // - PtrTrack->StartPtr =3D GetStartPointer (VariableStoreHeader= [Index]); - PtrTrack->EndPtr =3D GetEndPointer (VariableStoreHeader[I= ndex], Volatile, Global, Instance); - PtrTrack->CurrPtr =3D Variable[Index]; - PtrTrack->Volatile =3D Volatile; - - return EFI_SUCCESS; - } - } else { - // - // If VariableName is not an empty string, then VariableName a= nd VendorGuid are compared. - // - if (CompareGuid (VendorGuid, &VariableHeader.VendorGuid)) { - GetVariableNamePtr ( - Variable[Index], - Volatile, - Global, - Instance, - LocalVariableName - ); - - ASSERT (NameSizeOfVariable (&VariableHeader) !=3D 0); - if (CompareMem (VariableName, LocalVariableName, NameSizeOfV= ariable (&VariableHeader)) =3D=3D 0) { - if (VariableHeader.State =3D=3D (VAR_IN_DELETED_TRANSITION= & VAR_ADDED)) { - // - // If variable is in delete transition, record it. - // We will use if only no VAR_ADDED variable is found. - // - InDeletedVariable =3D Variable[Index]; - InDeletedStorageIndex =3D Index; - } else { - // - // If variable is not in delete transition, return it. - // - PtrTrack->StartPtr =3D GetStartPointer (VariableStoreHe= ader[Index]); - PtrTrack->EndPtr =3D GetEndPointer (VariableStoreHead= er[Index], Volatile, Global, Instance); - PtrTrack->CurrPtr =3D Variable[Index]; - PtrTrack->Volatile =3D Volatile; - - return EFI_SUCCESS; - } - } - } - } - } - } - - Variable[Index] =3D GetNextVariablePtr ( - Variable[Index], - Volatile, - Global, - Instance - ); - } - if (InDeletedVariable !=3D 0x0) { - // - // If no VAR_ADDED variable is found, and only variable in delete tr= ansition, then use this one. - // - PtrTrack->StartPtr =3D GetStartPointer (VariableStoreHeader[InDelet= edStorageIndex]); - PtrTrack->EndPtr =3D GetEndPointer ( - VariableStoreHeader[InDeletedStorageIndex], - (BOOLEAN)(InDeletedStorageIndex =3D=3D 0), - Global, - Instance - ); - PtrTrack->CurrPtr =3D InDeletedVariable; - PtrTrack->Volatile =3D (BOOLEAN)(InDeletedStorageIndex =3D=3D 0); - return EFI_SUCCESS; - } - } - PtrTrack->CurrPtr =3D 0x0; - return EFI_NOT_FOUND; -} - -/** - Variable store garbage collection and reclaim operation. - - @param[in] VariableBase Base address of variable store area. - @param[out] LastVariableOffset Offset of last variable. - @param[in] IsVolatile The variable store is volatile or not, - if it is non-volatile, need FTW. - @param[in] VirtualMode Current calling mode for this function. - @param[in] Global Context of this Extended SAL Variable Se= rvices Class call. - @param[in] UpdatingVariable Pointer to header of the variable that i= s being updated. - - @retval EFI_SUCCESS Variable store successfully reclaimed. - @retval EFI_OUT_OF_RESOURCES Fail to allocate memory buffer to hold a= ll valid variables. - -**/ -EFI_STATUS -Reclaim ( - IN EFI_PHYSICAL_ADDRESS VariableBase, - OUT UINTN *LastVariableOffset, - IN BOOLEAN IsVolatile, - IN BOOLEAN VirtualMode, - IN ESAL_VARIABLE_GLOBAL *Global, - IN EFI_PHYSICAL_ADDRESS UpdatingVariable - ) -{ - EFI_PHYSICAL_ADDRESS Variable; - EFI_PHYSICAL_ADDRESS AddedVariable; - EFI_PHYSICAL_ADDRESS NextVariable; - EFI_PHYSICAL_ADDRESS NextAddedVariable; - VARIABLE_STORE_HEADER VariableStoreHeader; - AUTHENTICATED_VARIABLE_HEADER VariableHeader; - AUTHENTICATED_VARIABLE_HEADER AddedVariableHeader; - CHAR16 VariableName[MAX_NAME_SIZE]; - CHAR16 AddedVariableName[MAX_NAME_SIZE]; - UINT8 *ValidBuffer; - UINTN MaximumBufferSize; - UINTN VariableSize; - UINTN NameSize; - UINT8 *CurrPtr; - BOOLEAN FoundAdded; - EFI_STATUS Status; - VARIABLE_GLOBAL *VariableGlobal; - UINT32 Instance; - - VariableGlobal =3D &Global->VariableGlobal[VirtualMode]; - Instance =3D Global->FvbInstance; - - GetVarStoreHeader (VariableBase, IsVolatile, VariableGlobal, Instance, &= VariableStoreHeader); - // - // recaluate the total size of Common/HwErr type variables in non-volati= le area. - // - if (!IsVolatile) { - Global->CommonVariableTotalSize =3D 0; - Global->HwErrVariableTotalSize =3D 0; - } - - // - // Calculate the size of buffer needed to gather all valid variables - // - Variable =3D GetStartPointer (VariableBase); - MaximumBufferSize =3D sizeof (VARIABLE_STORE_HEADER); - - while (IsValidVariableHeader (Variable, IsVolatile, VariableGlobal, Inst= ance, &VariableHeader)) { - NextVariable =3D GetNextVariablePtr (Variable, IsVolatile, VariableGlo= bal, Instance); - // - // Collect VAR_ADDED variables, and variables in delete transition sta= tus. - // - if (VariableHeader.State =3D=3D VAR_ADDED ||=20 - VariableHeader.State =3D=3D (VAR_IN_DELETED_TRANSITION & VAR_ADDED= ) - ) { - VariableSize =3D NextVariable - Variable; - MaximumBufferSize +=3D VariableSize; - } - - Variable =3D NextVariable; - } - - // - // Reserve the 1 Bytes with Oxff to identify the=20 - // end of the variable buffer.=20 - //=20 - MaximumBufferSize +=3D 1; - ValidBuffer =3D AllocatePool (MaximumBufferSize); - if (ValidBuffer =3D=3D NULL) { - return EFI_OUT_OF_RESOURCES; - } - - SetMem (ValidBuffer, MaximumBufferSize, 0xff); - - // - // Copy variable store header - // - CopyMem (ValidBuffer, &VariableStoreHeader, sizeof (VARIABLE_STORE_HEADE= R)); - CurrPtr =3D (UINT8 *) GetStartPointer ((EFI_PHYSICAL_ADDRESS) ValidBuffe= r); - - // - // Reinstall all ADDED variables - //=20 - Variable =3D GetStartPointer (VariableBase); - while (IsValidVariableHeader (Variable, IsVolatile, VariableGlobal, Inst= ance, &VariableHeader)) { - NextVariable =3D GetNextVariablePtr (Variable, IsVolatile, VariableGlo= bal, Instance); - if (VariableHeader.State =3D=3D VAR_ADDED) { - VariableSize =3D NextVariable - Variable; - CopyMem (CurrPtr, (UINT8 *) Variable, VariableSize); - CurrPtr +=3D VariableSize; - if ((!IsVolatile) && ((((AUTHENTICATED_VARIABLE_HEADER*)Variable)->A= ttributes & EFI_VARIABLE_HARDWARE_ERROR_RECORD) =3D=3D EFI_VARIABLE_HARDWAR= E_ERROR_RECORD)) { - Global->HwErrVariableTotalSize +=3D VariableSize; - } else if ((!IsVolatile) && ((((AUTHENTICATED_VARIABLE_HEADER*)Varia= ble)->Attributes & EFI_VARIABLE_HARDWARE_ERROR_RECORD) !=3D EFI_VARIABLE_HA= RDWARE_ERROR_RECORD)) { - Global->CommonVariableTotalSize +=3D VariableSize; - } - } - Variable =3D NextVariable; - } - // - // Reinstall in delete transition variables - //=20 - Variable =3D GetStartPointer (VariableBase); - while (IsValidVariableHeader (Variable, IsVolatile, VariableGlobal, Inst= ance, &VariableHeader)) { - NextVariable =3D GetNextVariablePtr (Variable, IsVolatile, VariableGlo= bal, Instance); - if (VariableHeader.State =3D=3D (VAR_IN_DELETED_TRANSITION & VAR_ADDED= )) { - - // - // Buffer has cached all ADDED variable.=20 - // Per IN_DELETED variable, we have to guarantee that - // no ADDED one in previous buffer.=20 - //=20 - FoundAdded =3D FALSE; - AddedVariable =3D GetStartPointer ((EFI_PHYSICAL_ADDRESS) ValidBuffe= r); - while (IsValidVariableHeader (AddedVariable, IsVolatile, VariableGlo= bal, Instance, &AddedVariableHeader)) { - NextAddedVariable =3D GetNextVariablePtr (AddedVariable, IsVolatil= e, VariableGlobal, Instance); - NameSize =3D NameSizeOfVariable (&AddedVariableHeader); - if (CompareGuid (&AddedVariableHeader.VendorGuid, &VariableHeader.= VendorGuid) && - NameSize =3D=3D NameSizeOfVariable (&VariableHeader) - ) { - GetVariableNamePtr (Variable, IsVolatile, VariableGlobal, Instan= ce, VariableName); - GetVariableNamePtr (AddedVariable, IsVolatile, VariableGlobal, I= nstance, AddedVariableName); - if (CompareMem (VariableName, AddedVariableName, NameSize) =3D= =3D 0) { - // - // If ADDED variable with the same name and vender GUID has be= en reinstalled, - // then discard this IN_DELETED copy. - // - FoundAdded =3D TRUE; - break; - } - } - AddedVariable =3D NextAddedVariable; - } - // - // Add IN_DELETE variables that have not been added to buffer - // - if (!FoundAdded) { - VariableSize =3D NextVariable - Variable; - CopyMem (CurrPtr, (UINT8 *) Variable, VariableSize); - if (Variable !=3D UpdatingVariable) { - // - // Make this IN_DELETE instance valid if: - // 1. No valid instance of this variable exists. - // 2. It is not the variable that is going to be updated. - // - ((AUTHENTICATED_VARIABLE_HEADER *) CurrPtr)->State =3D VAR_ADDED= ; - } - CurrPtr +=3D VariableSize; - if ((!IsVolatile) && ((((AUTHENTICATED_VARIABLE_HEADER*)Variable)-= >Attributes & EFI_VARIABLE_HARDWARE_ERROR_RECORD) =3D=3D EFI_VARIABLE_HARDW= ARE_ERROR_RECORD)) { - Global->HwErrVariableTotalSize +=3D VariableSize; - } else if ((!IsVolatile) && ((((AUTHENTICATED_VARIABLE_HEADER*)Var= iable)->Attributes & EFI_VARIABLE_HARDWARE_ERROR_RECORD) !=3D EFI_VARIABLE_= HARDWARE_ERROR_RECORD)) { - Global->CommonVariableTotalSize +=3D VariableSize; - } - } - } - Variable =3D NextVariable; - } - - if (IsVolatile) { - // - // If volatile variable store, just copy valid buffer - // - SetMem ((UINT8 *) (UINTN) VariableBase, VariableStoreHeader.Size, 0xff= ); - CopyMem ((UINT8 *) (UINTN) VariableBase, ValidBuffer, (UINTN) (CurrPtr= - (UINT8 *) ValidBuffer)); - Status =3D EFI_SUCCESS; - } else { - // - // If non-volatile variable store, perform FTW here. - // Write ValidBuffer to destination specified by VariableBase. - // - Status =3D FtwVariableSpace ( - VariableBase, - ValidBuffer, - (UINTN) (CurrPtr - (UINT8 *) ValidBuffer) - ); - } - if (!EFI_ERROR (Status)) { - *LastVariableOffset =3D (UINTN) (CurrPtr - (UINT8 *) ValidBuffer); - } else { - *LastVariableOffset =3D 0; - } - - FreePool (ValidBuffer); - - return Status; -} - -/** - Get index from supported language codes according to language string. - - This code is used to get corresponding index in supported language codes= . It can handle - RFC4646 and ISO639 language tags. - In ISO639 language tags, take 3-characters as a delimitation to find mat= ched string and calculate the index. - In RFC4646 language tags, take semicolon as a delimitation to find match= ed string and calculate the index. - - For example: - SupportedLang =3D "engfraengfra" - Lang =3D "eng" - Iso639Language =3D TRUE - The return value is "0". - Another example: - SupportedLang =3D "en;fr;en-US;fr-FR" - Lang =3D "fr-FR" - Iso639Language =3D FALSE - The return value is "3". - - @param[in] SupportedLang Platform supported language codes. - @param[in] Lang Configured language. - @param[in] Iso639Language A bool value to signify if the handle= r is operated on ISO639 or RFC4646. - - @return The index of language in the language= codes. - -**/ -UINTN -GetIndexFromSupportedLangCodes( - IN CHAR8 *SupportedLang, - IN CHAR8 *Lang, - IN BOOLEAN Iso639Language - )=20 -{ - UINTN Index; - UINTN CompareLength; - UINTN LanguageLength; - - if (Iso639Language) { - CompareLength =3D ISO_639_2_ENTRY_SIZE; - for (Index =3D 0; Index < AsciiStrLen (SupportedLang); Index +=3D Comp= areLength) { - if (AsciiStrnCmp (Lang, SupportedLang + Index, CompareLength) =3D=3D= 0) { - // - // Successfully find the index of Lang string in SupportedLang str= ing. - // - Index =3D Index / CompareLength; - return Index; - } - } - ASSERT (FALSE); - return 0; - } else { - // - // Compare RFC4646 language code - // - Index =3D 0; - for (LanguageLength =3D 0; Lang[LanguageLength] !=3D '\0'; LanguageLen= gth++); - - for (Index =3D 0; *SupportedLang !=3D '\0'; Index++, SupportedLang += =3D CompareLength) { - // - // Skip ';' characters in SupportedLang - // - for (; *SupportedLang !=3D '\0' && *SupportedLang =3D=3D ';'; Suppor= tedLang++); - // - // Determine the length of the next language code in SupportedLang - // - for (CompareLength =3D 0; SupportedLang[CompareLength] !=3D '\0' && = SupportedLang[CompareLength] !=3D ';'; CompareLength++); - =20 - if ((CompareLength =3D=3D LanguageLength) &&=20 - (AsciiStrnCmp (Lang, SupportedLang, CompareLength) =3D=3D 0)) { - // - // Successfully find the index of Lang string in SupportedLang str= ing. - // - return Index; - } - } - ASSERT (FALSE); - return 0; - } -} - -/** - Get language string from supported language codes according to index. - - This code is used to get corresponding language string in supported lang= uage codes. It can handle - RFC4646 and ISO639 language tags. - In ISO639 language tags, take 3-characters as a delimitation. Find langu= age string according to the index. - In RFC4646 language tags, take semicolon as a delimitation. Find languag= e string according to the index. - - For example: - SupportedLang =3D "engfraengfra" - Index =3D "1" - Iso639Language =3D TRUE - The return value is "fra". - Another example: - SupportedLang =3D "en;fr;en-US;fr-FR" - Index =3D "1" - Iso639Language =3D FALSE - The return value is "fr". - - @param[in] SupportedLang Platform supported language codes. - @param[in] Index the index in supported language codes. - @param[in] Iso639Language A bool value to signify if the handler is op= erated on ISO639 or RFC4646. - @param[in] VirtualMode Current calling mode for this function. - @param[in] Global Context of this Extended SAL Variable Servic= es Class call. - - @return The language string in the language codes. - -**/ -CHAR8 * -GetLangFromSupportedLangCodes ( - IN CHAR8 *SupportedLang, - IN UINTN Index, - IN BOOLEAN Iso639Language, - IN BOOLEAN VirtualMode, - IN ESAL_VARIABLE_GLOBAL *Global - ) -{ - UINTN SubIndex; - UINTN CompareLength; - CHAR8 *Supported; - - SubIndex =3D 0; - Supported =3D SupportedLang; - if (Iso639Language) { - // - // according to the index of Lang string in SupportedLang string to ge= t the language. - // As this code will be invoked in RUNTIME, therefore there is not mem= ory allocate/free operation. - // In driver entry, it pre-allocates a runtime attribute memory to acc= ommodate this string. - // - CompareLength =3D ISO_639_2_ENTRY_SIZE; - Global->Lang[CompareLength] =3D '\0'; - return CopyMem (Global->Lang, SupportedLang + Index * CompareLength, C= ompareLength); - - } else { - while (TRUE) { - // - // take semicolon as delimitation, sequentially traverse supported l= anguage codes. - // - for (CompareLength =3D 0; *Supported !=3D ';' && *Supported !=3D '\0= '; CompareLength++) { - Supported++; - } - if ((*Supported =3D=3D '\0') && (SubIndex !=3D Index)) { - // - // Have completed the traverse, but not find corrsponding string. - // This case is not allowed to happen. - // - ASSERT(FALSE); - return NULL; - } - if (SubIndex =3D=3D Index) { - // - // according to the index of Lang string in SupportedLang string t= o get the language. - // As this code will be invoked in RUNTIME, therefore there is not= memory allocate/free operation. - // In driver entry, it pre-allocates a runtime attribute memory to= accommodate this string. - // - Global->PlatformLang[VirtualMode][CompareLength] =3D '\0'; - return CopyMem (Global->PlatformLang[VirtualMode], Supported - Com= pareLength, CompareLength); - } - SubIndex++; - - // - // Skip ';' characters in Supported - // - for (; *Supported !=3D '\0' && *Supported =3D=3D ';'; Supported++); - } - } -} - -/** - Returns a pointer to an allocated buffer that contains the best matching= language=20 - from a set of supported languages. =20 - =20 - This function supports both ISO 639-2 and RFC 4646 language codes, but l= anguage=20 - code types may not be mixed in a single call to this function. This func= tion - supports a variable argument list that allows the caller to pass in a pr= ioritized - list of language codes to test against all the language codes in Support= edLanguages. - - If SupportedLanguages is NULL, then ASSERT(). - - @param[in] SupportedLanguages A pointer to a Null-terminated ASCII str= ing that - contains a set of language codes in the = format=20 - specified by Iso639Language. - @param[in] Iso639Language If TRUE, then all language codes are ass= umed to be - in ISO 639-2 format. If FALSE, then all= language - codes are assumed to be in RFC 4646 lang= uage format. - @param[in] VirtualMode Current calling mode for this function. - @param[in] ... A variable argument list that contains p= ointers to=20 - Null-terminated ASCII strings that conta= in one or more - language codes in the format specified b= y Iso639Language. - The first language code from each of the= se language - code lists is used to determine if it is= an exact or - close match to any of the language codes= in=20 - SupportedLanguages. Close matches only = apply to RFC 4646 - language codes, and the matching algorit= hm from RFC 4647 - is used to determine if a close match is= present. If=20 - an exact or close match is found, then t= he matching - language code from SupportedLanguages is= returned. If - no matches are found, then the next vari= able argument - parameter is evaluated. The variable ar= gument list=20 - is terminated by a NULL. - - @retval NULL The best matching language could not be found in Supporte= dLanguages. - @retval NULL There are not enough resources available to return the be= st matching=20 - language. - @retval Other A pointer to a Null-terminated ASCII string that is the b= est matching=20 - language in SupportedLanguages. - -**/ -CHAR8 * -VariableGetBestLanguage ( - IN CONST CHAR8 *SupportedLanguages,=20 - IN BOOLEAN Iso639Language, - IN BOOLEAN VirtualMode, - ... - ) -{ - VA_LIST Args; - CHAR8 *Language; - UINTN CompareLength; - UINTN LanguageLength; - CONST CHAR8 *Supported; - CHAR8 *Buffer; - - ASSERT (SupportedLanguages !=3D NULL); - - VA_START (Args, VirtualMode); - while ((Language =3D VA_ARG (Args, CHAR8 *)) !=3D NULL) { - // - // Default to ISO 639-2 mode - // - CompareLength =3D 3; - LanguageLength =3D MIN (3, AsciiStrLen (Language)); - - // - // If in RFC 4646 mode, then determine the length of the first RFC 464= 6 language code in Language - // - if (!Iso639Language) { - for (LanguageLength =3D 0; Language[LanguageLength] !=3D 0 && Langua= ge[LanguageLength] !=3D ';'; LanguageLength++); - } - - // - // Trim back the length of Language used until it is empty - // - while (LanguageLength > 0) { - // - // Loop through all language codes in SupportedLanguages - // - for (Supported =3D SupportedLanguages; *Supported !=3D '\0'; Support= ed +=3D CompareLength) { - // - // In RFC 4646 mode, then Loop through all language codes in Suppo= rtedLanguages - // - if (!Iso639Language) { - // - // Skip ';' characters in Supported - // - for (; *Supported !=3D '\0' && *Supported =3D=3D ';'; Supported+= +); - // - // Determine the length of the next language code in Supported - // - for (CompareLength =3D 0; Supported[CompareLength] !=3D 0 && Sup= ported[CompareLength] !=3D ';'; CompareLength++); - // - // If Language is longer than the Supported, then skip to the ne= xt language - // - if (LanguageLength > CompareLength) { - continue; - } - } - // - // See if the first LanguageLength characters in Supported match L= anguage - // - if (AsciiStrnCmp (Supported, Language, LanguageLength) =3D=3D 0) { - VA_END (Args); - - Buffer =3D Iso639Language ? mVariableModuleGlobal->Lang : mVaria= bleModuleGlobal->PlatformLang[VirtualMode]; - Buffer[CompareLength] =3D '\0'; - return CopyMem (Buffer, Supported, CompareLength); - } - } - - if (Iso639Language) { - // - // If ISO 639 mode, then each language can only be tested once - // - LanguageLength =3D 0; - } else { - // - // If RFC 4646 mode, then trim Language from the right to the next= '-' character=20 - // - for (LanguageLength--; LanguageLength > 0 && Language[LanguageLeng= th] !=3D '-'; LanguageLength--); - } - } - } - VA_END (Args); - - // - // No matches were found=20 - // - return NULL; -} - -/** - Hook the operations in PlatformLangCodes, LangCodes, PlatformLang and La= ng. - - When setting Lang/LangCodes, simultaneously update PlatformLang/Platform= LangCodes. - According to UEFI spec, PlatformLangCodes/LangCodes are only set once in= firmware initialization, - and are read-only. Therefore, in variable driver, only store the origina= l value for other use. - - @param[in] VariableName Name of variable. - @param[in] Data Variable data. - @param[in] DataSize Size of data. 0 means delete. - @param[in] VirtualMode Current calling mode for this function. - @param[in] Global Context of this Extended SAL Variable Services = Class call. - -**/ -VOID -AutoUpdateLangVariable( - IN CHAR16 *VariableName, - IN VOID *Data, - IN UINTN DataSize, - IN BOOLEAN VirtualMode, - IN ESAL_VARIABLE_GLOBAL *Global - ) -{ - EFI_STATUS Status; - CHAR8 *BestPlatformLang; - CHAR8 *BestLang; - UINTN Index; - UINT32 Attributes; - VARIABLE_POINTER_TRACK Variable; - BOOLEAN SetLanguageCodes; - CHAR16 **PredefinedVariableName; - VARIABLE_GLOBAL *VariableGlobal; - UINT32 Instance; - - // - // Don't do updates for delete operation - // - if (DataSize =3D=3D 0) { - return; - } - - SetLanguageCodes =3D FALSE; - VariableGlobal =3D &Global->VariableGlobal[VirtualMode]; - Instance =3D Global->FvbInstance; - - - PredefinedVariableName =3D &Global->VariableName[VirtualMode][0]; - if (StrCmp (VariableName, PredefinedVariableName[VAR_PLATFORM_LANG_CODES= ]) =3D=3D 0) { - // - // PlatformLangCodes is a volatile variable, so it can not be updated = at runtime. - // - if (EfiAtRuntime ()) { - return; - } - - SetLanguageCodes =3D TRUE; - - // - // According to UEFI spec, PlatformLangCodes is only set once in firmw= are initialization, and is read-only - // Therefore, in variable driver, only store the original value for ot= her use. - // - if (Global->PlatformLangCodes[VirtualMode] !=3D NULL) { - FreePool (Global->PlatformLangCodes[VirtualMode]); - } - Global->PlatformLangCodes[VirtualMode] =3D AllocateRuntimeCopyPool (Da= taSize, Data); - ASSERT (Global->PlatformLangCodes[VirtualMode] !=3D NULL); - - // - // PlatformLang holds a single language from PlatformLangCodes,=20 - // so the size of PlatformLangCodes is enough for the PlatformLang. - // - if (Global->PlatformLang[VirtualMode] !=3D NULL) { - FreePool (Global->PlatformLang[VirtualMode]); - } - Global->PlatformLang[VirtualMode] =3D AllocateRuntimePool (DataSize); - ASSERT (Global->PlatformLang[VirtualMode] !=3D NULL); - - } else if (StrCmp (VariableName, PredefinedVariableName[VAR_LANG_CODES])= =3D=3D 0) { - // - // LangCodes is a volatile variable, so it can not be updated at runti= me. - // - if (EfiAtRuntime ()) { - return; - } - - SetLanguageCodes =3D TRUE; - - // - // According to UEFI spec, LangCodes is only set once in firmware init= ialization, and is read-only - // Therefore, in variable driver, only store the original value for ot= her use. - // - if (Global->LangCodes[VirtualMode] !=3D NULL) { - FreePool (Global->LangCodes[VirtualMode]); - } - Global->LangCodes[VirtualMode] =3D AllocateRuntimeCopyPool (DataSize, = Data); - ASSERT (Global->LangCodes[VirtualMode] !=3D NULL); - } - - if (SetLanguageCodes=20 - && (Global->PlatformLangCodes[VirtualMode] !=3D NULL) - && (Global->LangCodes[VirtualMode] !=3D NULL)) { - // - // Update Lang if PlatformLang is already set - // Update PlatformLang if Lang is already set - // - Status =3D FindVariable (PredefinedVariableName[VAR_PLATFORM_LANG], Gl= obal->GlobalVariableGuid[VirtualMode], &Variable, VariableGlobal, Instance)= ; - if (!EFI_ERROR (Status)) { - // - // Update Lang - // - VariableName =3D PredefinedVariableName[VAR_PLATFORM_LANG]; - } else { - Status =3D FindVariable (PredefinedVariableName[VAR_LANG], Global->G= lobalVariableGuid[VirtualMode], &Variable, VariableGlobal, Instance); - if (!EFI_ERROR (Status)) { - // - // Update PlatformLang - // - VariableName =3D PredefinedVariableName[VAR_LANG]; - } else { - // - // Neither PlatformLang nor Lang is set, directly return - // - return; - } - } - Data =3D (VOID *) GetEndPointer (VariableGlobal->VolatileVariableBa= se, TRUE, VariableGlobal, Instance); - GetVariableDataPtr ((EFI_PHYSICAL_ADDRESS) Variable.CurrPtr, Variable.= Volatile, VariableGlobal, Instance, (CHAR16 *) Data); - - Status =3D AccessVariableStore ( - FALSE, - VariableGlobal, - Variable.Volatile, - Instance, - (UINTN) &(((AUTHENTICATED_VARIABLE_HEADER *)Variable.CurrPt= r)->DataSize), - sizeof (DataSize), - &DataSize - );=20 - ASSERT_EFI_ERROR (Status); - } - - // - // According to UEFI spec, "Lang" and "PlatformLang" is NV|BS|RT attribu= tions. - // - Attributes =3D EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCE= SS | EFI_VARIABLE_RUNTIME_ACCESS; - - if (StrCmp (VariableName, PredefinedVariableName[VAR_PLATFORM_LANG]) =3D= =3D 0) { - // - // Update Lang when PlatformLangCodes/LangCodes were set. - // - if ((Global->PlatformLangCodes[VirtualMode] !=3D NULL) && (Global->Lan= gCodes[VirtualMode] !=3D NULL)) { - // - // When setting PlatformLang, firstly get most matched language stri= ng from supported language codes. - // - BestPlatformLang =3D VariableGetBestLanguage (Global->PlatformLangCo= des[VirtualMode], FALSE, VirtualMode, Data, NULL); - if (BestPlatformLang !=3D NULL) { - // - // Get the corresponding index in language codes. - // - Index =3D GetIndexFromSupportedLangCodes (Global->PlatformLangCode= s[VirtualMode], BestPlatformLang, FALSE); - - // - // Get the corresponding ISO639 language tag according to RFC4646 = language tag. - // - BestLang =3D GetLangFromSupportedLangCodes (Global->LangCodes[Virt= ualMode], Index, TRUE, VirtualMode, Global); - - // - // Successfully convert PlatformLang to Lang, and set the BestLang= value into Lang variable simultaneously. - // - FindVariable (PredefinedVariableName[VAR_LANG], Global->GlobalVari= ableGuid[VirtualMode], &Variable, VariableGlobal, Instance); - - Status =3D UpdateVariable ( - PredefinedVariableName[VAR_LANG], - Global->GlobalVariableGuid[VirtualMode], - BestLang, - ISO_639_2_ENTRY_SIZE + 1, - Attributes, - 0, - 0, - VirtualMode, - Global, - &Variable - ); - - DEBUG ((EFI_D_INFO, "Variable Driver Auto Update PlatformLang, Pla= tformLang:%a, Lang:%a\n", BestPlatformLang, BestLang)); - - ASSERT_EFI_ERROR (Status); - } - } - - } else if (StrCmp (VariableName, PredefinedVariableName[VAR_LANG]) =3D= =3D 0) { - // - // Update PlatformLang when PlatformLangCodes/LangCodes were set. - // - if ((Global->PlatformLangCodes[VirtualMode] !=3D NULL) && (Global->Lan= gCodes[VirtualMode] !=3D NULL)) { - // - // When setting Lang, firstly get most matched language string from = supported language codes. - // - BestLang =3D VariableGetBestLanguage (Global->LangCodes[VirtualMode]= , TRUE, VirtualMode, Data, NULL); - if (BestLang !=3D NULL) { - // - // Get the corresponding index in language codes. - // - Index =3D GetIndexFromSupportedLangCodes (Global->LangCodes[Virtua= lMode], BestLang, TRUE); - - // - // Get the corresponding RFC4646 language tag according to ISO639 = language tag. - // - BestPlatformLang =3D GetLangFromSupportedLangCodes (Global->Platfo= rmLangCodes[VirtualMode], Index, FALSE, VirtualMode, Global); - - // - // Successfully convert Lang to PlatformLang, and set the BestPlat= formLang value into PlatformLang variable simultaneously. - // - FindVariable (PredefinedVariableName[VAR_PLATFORM_LANG], Global->G= lobalVariableGuid[VirtualMode], &Variable, VariableGlobal, Instance); - - Status =3D UpdateVariable ( - PredefinedVariableName[VAR_PLATFORM_LANG],=20 - Global->GlobalVariableGuid[VirtualMode],=20 - BestPlatformLang,=20 - AsciiStrSize (BestPlatformLang),=20 - Attributes,=20 - 0, - 0, - VirtualMode,=20 - Global,=20 - &Variable - ); - - DEBUG ((EFI_D_INFO, "Variable Driver Auto Update Lang, Lang:%a, Pl= atformLang:%a\n", BestLang, BestPlatformLang)); - ASSERT_EFI_ERROR (Status); - } - } - } -} - -/** - Update the variable region with Variable information. These are the same= =20 - arguments as the EFI Variable services. - - @param[in] VariableName Name of variable. - @param[in] VendorGuid Guid of variable. - @param[in] Data Variable data. - @param[in] DataSize Size of data. 0 means delete. - @param[in] Attributes Attributes of the variable. - @param[in] KeyIndex Index of associated public key. - @param[in] MonotonicCount Value of associated monotonic count.=20 - @param[in] VirtualMode Current calling mode for this function. - @param[in] Global Context of this Extended SAL Variable Serv= ices Class call. - @param[in] Variable The variable information which is used to = keep track of variable usage. - - @retval EFI_SUCCESS The update operation is success. - @retval EFI_OUT_OF_RESOURCES Variable region is full, can not write oth= er data into this region. - -**/ -EFI_STATUS -EFIAPI -UpdateVariable ( - IN CHAR16 *VariableName, - IN EFI_GUID *VendorGuid, - IN VOID *Data, - IN UINTN DataSize, - IN UINT32 Attributes OPTIONAL, =20 - IN UINT32 KeyIndex OPTIONAL, - IN UINT64 MonotonicCount OPTIONAL, - IN BOOLEAN VirtualMode, - IN ESAL_VARIABLE_GLOBAL *Global, - IN VARIABLE_POINTER_TRACK *Variable - ) -{ - EFI_STATUS Status; - AUTHENTICATED_VARIABLE_HEADER *NextVariable; - UINTN VarNameOffset; - UINTN VarDataOffset; - UINTN VarNameSize; - UINTN VarSize; - BOOLEAN Volatile; - UINT8 State; - AUTHENTICATED_VARIABLE_HEADER VariableHeader; - AUTHENTICATED_VARIABLE_HEADER *NextVariableHeader; - BOOLEAN Valid; - BOOLEAN Reclaimed; - VARIABLE_STORE_HEADER VariableStoreHeader; - UINTN ScratchSize; - VARIABLE_GLOBAL *VariableGlobal; - UINT32 Instance; - - VariableGlobal =3D &Global->VariableGlobal[VirtualMode]; - Instance =3D Global->FvbInstance; - - Reclaimed =3D FALSE; - - if (Variable->CurrPtr !=3D 0) { - - Valid =3D IsValidVariableHeader (Variable->CurrPtr, Variable->Volatile= , VariableGlobal, Instance, &VariableHeader); - if (!Valid) { - Status =3D EFI_NOT_FOUND; - goto Done; - } - - // - // Update/Delete existing variable - // - Volatile =3D Variable->Volatile; - =20 - if (EfiAtRuntime ()) { =20 - // - // If EfiAtRuntime and the variable is Volatile and Runtime Access, = =20 - // the volatile is ReadOnly, and SetVariable should be aborted and=20 - // return EFI_WRITE_PROTECTED. - // - if (Variable->Volatile) { - Status =3D EFI_WRITE_PROTECTED; - goto Done; - } - // - // Only variable have NV attribute can be updated/deleted in Runtime - // - if ((VariableHeader.Attributes & EFI_VARIABLE_NON_VOLATILE) =3D=3D 0= ) { - Status =3D EFI_INVALID_PARAMETER; - goto Done; =20 - } - } - // - // Setting a data variable with no access, or zero DataSize attributes - // specified causes it to be deleted. - // - if (DataSize =3D=3D 0 || (Attributes & (EFI_VARIABLE_RUNTIME_ACCESS | = EFI_VARIABLE_BOOTSERVICE_ACCESS)) =3D=3D 0) { =20 - State =3D VariableHeader.State; - State &=3D VAR_DELETED; - - Status =3D AccessVariableStore ( - TRUE, - VariableGlobal, - Variable->Volatile, - Instance, - (UINTN) &(((AUTHENTICATED_VARIABLE_HEADER *)Variable->Cur= rPtr)->State), - sizeof (UINT8), - &State - );=20 - if (!EFI_ERROR (Status)) { - UpdateVariableInfo (VariableName, VendorGuid, Volatile, FALSE, FAL= SE, TRUE, FALSE); - UpdateVariableCache (VariableName, VendorGuid, Attributes, DataSiz= e, Data); - } - goto Done; =20 - } - // - // Logic comes here to update variable. - // If the variable is marked valid and the same data has been passed i= n - // then return to the caller immediately. - // - if (DataSizeOfVariable (&VariableHeader) =3D=3D DataSize) { - NextVariable =3D (AUTHENTICATED_VARIABLE_HEADER *)GetEndPointer (Var= iableGlobal->VolatileVariableBase, TRUE, VariableGlobal, Instance); - GetVariableDataPtr (Variable->CurrPtr, Variable->Volatile, VariableG= lobal, Instance, (CHAR16 *) NextVariable); - if (CompareMem (Data, (VOID *) NextVariable, DataSize) =3D=3D 0) { - UpdateVariableInfo (VariableName, VendorGuid, Volatile, FALSE, TRU= E, FALSE, FALSE); - Status =3D EFI_SUCCESS; - goto Done; - } - } - if ((VariableHeader.State =3D=3D VAR_ADDED) || - (VariableHeader.State =3D=3D (VAR_ADDED & VAR_IN_DELETED_TRANSITIO= N))) { - // - // If new data is different from the old one, mark the old one as VA= R_IN_DELETED_TRANSITION. - // It will be deleted if new variable is successfully written. - // - State =3D VariableHeader.State; - State &=3D VAR_IN_DELETED_TRANSITION; - - Status =3D AccessVariableStore ( - TRUE, - VariableGlobal, - Variable->Volatile, - Instance, - (UINTN) &(((AUTHENTICATED_VARIABLE_HEADER *)Variable->Cur= rPtr)->State), - sizeof (UINT8), - &State - ); =20 - if (EFI_ERROR (Status)) { - goto Done; =20 - } - } =20 - } else { - // - // Create a new variable - // =20 - =20 - // - // Make sure we are trying to create a new variable. - // Setting a data variable with no access, or zero DataSize attributes= means to delete it. =20 - // - if (DataSize =3D=3D 0 || (Attributes & (EFI_VARIABLE_RUNTIME_ACCESS | = EFI_VARIABLE_BOOTSERVICE_ACCESS)) =3D=3D 0) { - Status =3D EFI_NOT_FOUND; - goto Done; - } - =20 - // - // Only variable have NV|RT attribute can be created in Runtime - // - if (EfiAtRuntime () && - (((Attributes & EFI_VARIABLE_RUNTIME_ACCESS) =3D=3D 0) || ((Attrib= utes & EFI_VARIABLE_NON_VOLATILE) =3D=3D 0))) { - Status =3D EFI_INVALID_PARAMETER; - goto Done; - } =20 - } - - // - // Function part - create a new variable and copy the data. - // Both update a variable and create a variable will come here. - // - // Tricky part: Use scratch data area at the end of volatile variable st= ore - // as a temporary storage. - // - NextVariable =3D (AUTHENTICATED_VARIABLE_HEADER *)GetEndPointer (Variabl= eGlobal->VolatileVariableBase, TRUE, VariableGlobal, Instance); - ScratchSize =3D MAX (PcdGet32 (PcdMaxVariableSize), PcdGet32 (PcdMaxHard= wareErrorVariableSize)); - NextVariableHeader =3D (AUTHENTICATED_VARIABLE_HEADER *) NextVariable; - - SetMem (NextVariableHeader, ScratchSize, 0xff); - - NextVariableHeader->StartId =3D VARIABLE_DATA; - NextVariableHeader->Attributes =3D Attributes; - NextVariableHeader->PubKeyIndex =3D KeyIndex; - NextVariableHeader->MonotonicCount =3D MonotonicCount; - NextVariableHeader->Reserved =3D 0; - VarNameOffset =3D sizeof (AUTHENTICATED_VARIABLE_H= EADER); - VarNameSize =3D StrSize (VariableName); - CopyMem ( - (UINT8 *) ((UINTN)NextVariable + VarNameOffset), - VariableName, - VarNameSize - ); - VarDataOffset =3D VarNameOffset + VarNameSize + GET_PAD_SIZE (VarNameSiz= e); - CopyMem ( - (UINT8 *) ((UINTN)NextVariable + VarDataOffset), - Data, - DataSize - ); - CopyMem (&NextVariableHeader->VendorGuid, VendorGuid, sizeof (EFI_GUID))= ; - // - // There will be pad bytes after Data, the NextVariable->NameSize and - // NextVariable->DataSize should not include pad size so that variable - // service can get actual size in GetVariable. - // - NextVariableHeader->NameSize =3D (UINT32)VarNameSize; - NextVariableHeader->DataSize =3D (UINT32)DataSize; - - // - // The actual size of the variable that stores in storage should - // include pad size. - // - VarSize =3D VarDataOffset + DataSize + GET_PAD_SIZE (DataSize); - if ((Attributes & EFI_VARIABLE_NON_VOLATILE) !=3D 0) { - // - // Create a nonvolatile variable - // - Volatile =3D FALSE; - =20 - GetVarStoreHeader (VariableGlobal->NonVolatileVariableBase, FALSE, Var= iableGlobal, Instance, &VariableStoreHeader); - if ((((Attributes & EFI_VARIABLE_HARDWARE_ERROR_RECORD) !=3D 0)=20 - && ((HEADER_ALIGN (VarSize) + Global->HwErrVariableTotalSize)= > PcdGet32(PcdHwErrStorageSize))) - || (((Attributes & EFI_VARIABLE_HARDWARE_ERROR_RECORD) =3D=3D= 0)=20 - && ((HEADER_ALIGN (VarSize) + Global->CommonVariableTotalSize= ) > VariableStoreHeader.Size - sizeof (VARIABLE_STORE_HEADER) - PcdGet32(Pc= dHwErrStorageSize)))) { - if (EfiAtRuntime ()) { - Status =3D EFI_OUT_OF_RESOURCES; - goto Done; - } - // - // Perform garbage collection & reclaim operation - // - Status =3D Reclaim (VariableGlobal->NonVolatileVariableBase, &(Globa= l->NonVolatileLastVariableOffset), FALSE, VirtualMode, Global, Variable->Cu= rrPtr); - if (EFI_ERROR (Status)) { - goto Done; - } - - Reclaimed =3D TRUE; - // - // If still no enough space, return out of resources - // - if ((((Attributes & EFI_VARIABLE_HARDWARE_ERROR_RECORD) !=3D 0)=20 - && ((HEADER_ALIGN (VarSize) + Global->HwErrVariableTotalSiz= e) > PcdGet32(PcdHwErrStorageSize))) - || (((Attributes & EFI_VARIABLE_HARDWARE_ERROR_RECORD) =3D= =3D 0)=20 - && ((HEADER_ALIGN (VarSize) + Global->CommonVariableTotalSi= ze) > VariableStoreHeader.Size - sizeof (VARIABLE_STORE_HEADER) - PcdGet32(= PcdHwErrStorageSize)))) { - Status =3D EFI_OUT_OF_RESOURCES; - goto Done; - } - } - // - // Four steps - // 1. Write variable header - // 2. Set variable state to header valid =20 - // 3. Write variable data - // 4. Set variable state to valid - // - // - // Step 1: - // - Status =3D AccessVariableStore ( - TRUE, - VariableGlobal, - FALSE, - Instance, - VariableGlobal->NonVolatileVariableBase + Global->NonVolati= leLastVariableOffset, - sizeof (AUTHENTICATED_VARIABLE_HEADER), - (UINT8 *) NextVariable - ); - - if (EFI_ERROR (Status)) { - goto Done; - } - - // - // Step 2: - // - NextVariableHeader->State =3D VAR_HEADER_VALID_ONLY; - Status =3D AccessVariableStore ( - TRUE, - VariableGlobal, - FALSE, - Instance, - VariableGlobal->NonVolatileVariableBase + Global->NonVolati= leLastVariableOffset, - sizeof (AUTHENTICATED_VARIABLE_HEADER), - (UINT8 *) NextVariable - ); - - if (EFI_ERROR (Status)) { - goto Done; - } - // - // Step 3: - // - Status =3D AccessVariableStore ( - TRUE, - VariableGlobal, - FALSE, - Instance, - VariableGlobal->NonVolatileVariableBase + Global->NonVolati= leLastVariableOffset + sizeof (AUTHENTICATED_VARIABLE_HEADER), - (UINT32) VarSize - sizeof (AUTHENTICATED_VARIABLE_HEADER), - (UINT8 *) NextVariable + sizeof (AUTHENTICATED_VARIABLE_HEA= DER) - ); - - if (EFI_ERROR (Status)) { - goto Done; - } - // - // Step 4: - // - NextVariableHeader->State =3D VAR_ADDED; - Status =3D AccessVariableStore ( - TRUE, - VariableGlobal, - FALSE, - Instance, - VariableGlobal->NonVolatileVariableBase + Global->NonVolati= leLastVariableOffset, - sizeof (AUTHENTICATED_VARIABLE_HEADER), - (UINT8 *) NextVariable - ); - - if (EFI_ERROR (Status)) { - goto Done; - } - - Global->NonVolatileLastVariableOffset +=3D HEADER_ALIGN (VarSize); - - if ((Attributes & EFI_VARIABLE_HARDWARE_ERROR_RECORD) !=3D 0) { - Global->HwErrVariableTotalSize +=3D HEADER_ALIGN (VarSize); - } else { - Global->CommonVariableTotalSize +=3D HEADER_ALIGN (VarSize); - } - } else { - // - // Create a volatile variable - // =20 - Volatile =3D TRUE; - - if ((UINT32) (HEADER_ALIGN(VarSize) + Global->VolatileLastVariableOffs= et) > - ((VARIABLE_STORE_HEADER *) ((UINTN) (VariableGlobal->VolatileVaria= bleBase)))->Size) { - // - // Perform garbage collection & reclaim operation - // - Status =3D Reclaim (VariableGlobal->VolatileVariableBase, &Global->V= olatileLastVariableOffset, TRUE, VirtualMode, Global, Variable->CurrPtr); - if (EFI_ERROR (Status)) { - goto Done; - } - // - // If still no enough space, return out of resources - // - if ((UINT32) (HEADER_ALIGN (VarSize) + Global->VolatileLastVariableO= ffset) > - ((VARIABLE_STORE_HEADER *) ((UINTN) (VariableGlobal->VolatileV= ariableBase)))->Size - ) { - Status =3D EFI_OUT_OF_RESOURCES; - goto Done; - } - Reclaimed =3D TRUE; - } - - NextVariableHeader->State =3D VAR_ADDED; - Status =3D AccessVariableStore ( - TRUE, - VariableGlobal, - TRUE, - Instance, - VariableGlobal->VolatileVariableBase + Global->VolatileLast= VariableOffset, - (UINT32) VarSize, - (UINT8 *) NextVariable - ); - - if (EFI_ERROR (Status)) { - goto Done; - } - - Global->VolatileLastVariableOffset +=3D HEADER_ALIGN (VarSize); - } - // - // Mark the old variable as deleted - // If storage has just been reclaimed, the old variable marked as VAR_IN= _DELETED_TRANSITION - // has already been eliminated, so no need to delete it. - // - if (!Reclaimed && !EFI_ERROR (Status) && Variable->CurrPtr !=3D 0) { - State =3D ((AUTHENTICATED_VARIABLE_HEADER *)Variable->CurrPtr)->State; - State &=3D VAR_DELETED; - - Status =3D AccessVariableStore ( - TRUE, - VariableGlobal, - Variable->Volatile, - Instance, - (UINTN) &(((AUTHENTICATED_VARIABLE_HEADER *)Variable->CurrP= tr)->State), - sizeof (UINT8), - &State - ); - } - - if (!EFI_ERROR (Status)) { - UpdateVariableInfo (VariableName, VendorGuid, Volatile, FALSE, TRUE, F= ALSE, FALSE); - UpdateVariableCache (VariableName, VendorGuid, Attributes, DataSize, D= ata); - } - -Done: - return Status; -} - -/** - Implements EsalGetVariable function of Extended SAL Variable Services Cl= ass. - - This function implements EsalGetVariable function of Extended SAL Variab= le Services Class. - It is equivalent in functionality to the EFI Runtime Service GetVariable= (). - =20 - @param[in] VariableName A Null-terminated Unicode string that is= the name of - the vendor's variable. - @param[in] VendorGuid A unique identifier for the vendor. - @param[out] Attributes If not NULL, a pointer to the memory loc= ation to return the=20 - attributes bitmask for the variable. - @param[in, out] DataSize Size of Data found. If size is less than= the - data, this value contains the required s= ize. - @param[out] Data On input, the size in bytes of the retur= n Data buffer. =20 - On output, the size of data returned in = Data. - @param[in] VirtualMode Current calling mode for this function. - @param[in] Global Context of this Extended SAL Variable Se= rvices Class call. - - @retval EFI_SUCCESS The function completed successfully.=20 - @retval EFI_NOT_FOUND The variable was not found. - @retval EFI_BUFFER_TOO_SMALL DataSize is too small for the result. Da= taSize has=20 - been updated with the size needed to comp= lete the request. - @retval EFI_INVALID_PARAMETER VariableName is NULL. - @retval EFI_INVALID_PARAMETER VendorGuid is NULL. - @retval EFI_INVALID_PARAMETER DataSize is NULL. - @retval EFI_INVALID_PARAMETER DataSize is not too small and Data is NUL= L. - @retval EFI_DEVICE_ERROR The variable could not be retrieved due t= o a hardware error. - @retval EFI_SECURITY_VIOLATION The variable could not be retrieved due t= o an authentication failure. - -**/ -EFI_STATUS -EFIAPI -EsalGetVariable ( - IN CHAR16 *VariableName, - IN EFI_GUID *VendorGuid, - OUT UINT32 *Attributes OPTIONAL, - IN OUT UINTN *DataSize, - OUT VOID *Data, - IN BOOLEAN VirtualMode, - IN ESAL_VARIABLE_GLOBAL *Global - ) -{ - VARIABLE_POINTER_TRACK Variable; - UINTN VarDataSize; - EFI_STATUS Status; - AUTHENTICATED_VARIABLE_HEADER VariableHeader; - BOOLEAN Valid; - VARIABLE_GLOBAL *VariableGlobal; - UINT32 Instance; - - if (VariableName =3D=3D NULL || VendorGuid =3D=3D NULL || DataSize =3D= =3D NULL) { - return EFI_INVALID_PARAMETER; - } - - VariableGlobal =3D &Global->VariableGlobal[VirtualMode]; - Instance =3D Global->FvbInstance; - - AcquireLockOnlyAtBootTime(&VariableGlobal->VariableServicesLock); - - // - // Check if this variable exists in cache. - // - Status =3D FindVariableInCache (VariableName, VendorGuid, Attributes, Da= taSize, Data); - if ((Status =3D=3D EFI_BUFFER_TOO_SMALL) || (Status =3D=3D EFI_SUCCESS))= { - // - // If variable exists in cache, just update statistical information fo= r it and finish. - // Here UpdateVariableInfo() has already retrieved data & attributes f= or output. - // - UpdateVariableInfo (VariableName, VendorGuid, FALSE, TRUE, FALSE, FALS= E, TRUE); - goto Done; - } - // - // If variable does not exist in cache, search for it in variable storag= e area. - // - Status =3D FindVariable (VariableName, VendorGuid, &Variable, VariableGl= obal, Instance); - if (Variable.CurrPtr =3D=3D 0x0 || EFI_ERROR (Status)) { - // - // If it cannot be found in variable storage area, goto Done. - // - goto Done; - } - - Valid =3D IsValidVariableHeader (Variable.CurrPtr, Variable.Volatile, Va= riableGlobal, Instance, &VariableHeader); - if (!Valid) { - Status =3D EFI_NOT_FOUND; - goto Done; - } - // - // If variable exists, but not in cache, get its data and attributes, up= date - // statistical information, and update cache. - // - VarDataSize =3D DataSizeOfVariable (&VariableHeader); - ASSERT (VarDataSize !=3D 0); - - if (*DataSize >=3D VarDataSize) { - if (Data =3D=3D NULL) { - Status =3D EFI_INVALID_PARAMETER; - goto Done; - } - - GetVariableDataPtr ( - Variable.CurrPtr, - Variable.Volatile, - VariableGlobal, - Instance, - Data - ); - if (Attributes !=3D NULL) { - *Attributes =3D VariableHeader.Attributes; - } - - *DataSize =3D VarDataSize; - UpdateVariableInfo (VariableName, VendorGuid, Variable.Volatile, TRUE,= FALSE, FALSE, FALSE); - UpdateVariableCache (VariableName, VendorGuid, VariableHeader.Attribut= es, VarDataSize, Data); -=20 - Status =3D EFI_SUCCESS; - goto Done; - } else { - // - // If DataSize is too small for the result, return EFI_BUFFER_TOO_SMAL= L. - // - *DataSize =3D VarDataSize; - Status =3D EFI_BUFFER_TOO_SMALL; - goto Done; - } - -Done: - ReleaseLockOnlyAtBootTime (&VariableGlobal->VariableServicesLock); - return Status; -} - -/** - Implements EsalGetNextVariableName function of Extended SAL Variable Ser= vices Class. - - This function implements EsalGetNextVariableName function of Extended SA= L Variable Services Class. - It is equivalent in functionality to the EFI Runtime Service GetNextVari= ableName(). - =20 - @param[in, out] VariableNameSize Size of the variable - @param[in, out] VariableName On input, supplies the last VariableNam= e that was returned by GetNextVariableName(). - On output, returns the Null-terminated = Unicode string of the current variable. - @param[in, out] VendorGuid On input, supplies the last VendorGuid = that was returned by GetNextVariableName(). - On output, returns the VendorGuid of th= e current variable. =20 - @param[in] VirtualMode Current calling mode for this function. - @param[in] Global Context of this Extended SAL Variable S= ervices Class call. - - @retval EFI_SUCCESS The function completed successfully.=20 - @retval EFI_NOT_FOUND The next variable was not found. - @retval EFI_BUFFER_TOO_SMALL VariableNameSize is too small for the re= sult.=20 - VariableNameSize has been updated with t= he size needed to complete the request. - @retval EFI_INVALID_PARAMETER VariableNameSize is NULL. - @retval EFI_INVALID_PARAMETER VariableName is NULL. - @retval EFI_INVALID_PARAMETER VendorGuid is NULL. - @retval EFI_DEVICE_ERROR The variable name could not be retrieved= due to a hardware error. - -**/ -EFI_STATUS -EFIAPI -EsalGetNextVariableName ( - IN OUT UINTN *VariableNameSize, - IN OUT CHAR16 *VariableName, - IN OUT EFI_GUID *VendorGuid, - IN BOOLEAN VirtualMode, - IN ESAL_VARIABLE_GLOBAL *Global - ) -{ - VARIABLE_POINTER_TRACK Variable; - UINTN VarNameSize; - EFI_STATUS Status; - AUTHENTICATED_VARIABLE_HEADER VariableHeader; - VARIABLE_GLOBAL *VariableGlobal; - UINT32 Instance; - - if (VariableNameSize =3D=3D NULL || VariableName =3D=3D NULL || VendorGu= id =3D=3D NULL) { - return EFI_INVALID_PARAMETER; - } - - VariableGlobal =3D &Global->VariableGlobal[VirtualMode]; - Instance =3D Global->FvbInstance; - - AcquireLockOnlyAtBootTime(&VariableGlobal->VariableServicesLock); - - Status =3D FindVariable (VariableName, VendorGuid, &Variable, VariableGl= obal, Instance); - // - // If the variable does not exist, goto Done and return. - // - if (Variable.CurrPtr =3D=3D 0x0 || EFI_ERROR (Status)) { - goto Done; - } - - if (VariableName[0] !=3D 0) { - // - // If variable name is not NULL, get next variable - // - Variable.CurrPtr =3D GetNextVariablePtr ( - Variable.CurrPtr, - Variable.Volatile, - VariableGlobal, - Instance - ); - } - - while (TRUE) { - if (Variable.CurrPtr >=3D Variable.EndPtr || Variable.CurrPtr =3D=3D 0= x0) { - // - // If fail to find a variable in current area, reverse the volatile = attribute of area to search. - // - Variable.Volatile =3D (BOOLEAN) (Variable.Volatile ^ ((BOOLEAN) 0x1)= ); - // - // Here we depend on the searching sequence of FindVariable(). - // It first searches volatile area, then NV area. - // So if the volatile attribute after switching is non-volatile, it = means that we have finished searching volatile area, - // and EFI_NOT_FOUND is returnd. - // Otherwise, it means that we have finished searchig non-volatile a= rea, and we will continue to search volatile area. - // - if (!Variable.Volatile) { - Variable.StartPtr =3D GetStartPointer (VariableGlobal->NonVolatile= VariableBase); - Variable.EndPtr =3D GetEndPointer (VariableGlobal->NonVolatileVa= riableBase, FALSE, VariableGlobal, Instance); - } else { - Status =3D EFI_NOT_FOUND; - goto Done; - } - - Variable.CurrPtr =3D Variable.StartPtr; - if (!IsValidVariableHeader (Variable.CurrPtr, Variable.Volatile, Var= iableGlobal, Instance, NULL)) { - continue; - } - } - // - // Variable is found - // - if (IsValidVariableHeader (Variable.CurrPtr, Variable.Volatile, Variab= leGlobal, Instance, &VariableHeader)) { - if ((VariableHeader.State =3D=3D VAR_ADDED) && - (!(EfiAtRuntime () && ((VariableHeader.Attributes & EFI_VARIABLE= _RUNTIME_ACCESS) =3D=3D 0)))) { - VarNameSize =3D NameSizeOfVariable (&VariableHeader); - ASSERT (VarNameSize !=3D 0); - - if (VarNameSize <=3D *VariableNameSize) { - GetVariableNamePtr ( - Variable.CurrPtr, - Variable.Volatile, - VariableGlobal, - Instance, - VariableName - ); - CopyMem ( - VendorGuid, - &VariableHeader.VendorGuid, - sizeof (EFI_GUID) - ); - Status =3D EFI_SUCCESS; - } else { - Status =3D EFI_BUFFER_TOO_SMALL; - } - - *VariableNameSize =3D VarNameSize; - goto Done; - } - } - - Variable.CurrPtr =3D GetNextVariablePtr ( - Variable.CurrPtr, - Variable.Volatile, - VariableGlobal, - Instance - ); - } - -Done: - ReleaseLockOnlyAtBootTime (&VariableGlobal->VariableServicesLock); - return Status; -} - -/** - Implements EsalSetVariable function of Extended SAL Variable Services Cl= ass. - - This function implements EsalSetVariable function of Extended SAL Variab= le Services Class. - It is equivalent in functionality to the EFI Runtime Service SetVariable= (). - =20 - @param[in] VariableName A Null-terminated Unicode string that is = the name of the vendor's - variable. Each VariableName is unique fo= r each=20 - VendorGuid. VariableName must contain 1 = or more=20 - Unicode characters. If VariableName is a= n empty Unicode=20 - string, then EFI_INVALID_PARAMETER is ret= urned. - @param[in] VendorGuid A unique identifier for the vendor. - @param[in] Attributes Attributes bitmask to set for the variabl= e. - @param[in] DataSize The size in bytes of the Data buffer. A = size of zero causes the - variable to be deleted. - @param[in] Data The contents for the variable. - @param[in] VirtualMode Current calling mode for this function. - @param[in] Global Context of this Extended SAL Variable Ser= vices Class call. - - @retval EFI_SUCCESS The firmware has successfully stored the = variable and its data as=20 - defined by the Attributes. - @retval EFI_INVALID_PARAMETER An invalid combination of attribute bits = was supplied, or the=20 - DataSize exceeds the maximum allowed. - @retval EFI_INVALID_PARAMETER VariableName is an empty Unicode string. - @retval EFI_OUT_OF_RESOURCES Not enough storage is available to hold t= he variable and its data. - @retval EFI_DEVICE_ERROR The variable could not be saved due to a = hardware failure. - @retval EFI_WRITE_PROTECTED The variable in question is read-only. - @retval EFI_WRITE_PROTECTED The variable in question cannot be delete= d. - @retval EFI_SECURITY_VIOLATION The variable could not be retrieved due t= o an authentication failure. - @retval EFI_NOT_FOUND The variable trying to be updated or dele= ted was not found. - -**/ -EFI_STATUS -EFIAPI -EsalSetVariable ( - IN CHAR16 *VariableName, - IN EFI_GUID *VendorGuid, - IN UINT32 Attributes, - IN UINTN DataSize, - IN VOID *Data, - IN BOOLEAN VirtualMode, - IN ESAL_VARIABLE_GLOBAL *Global - ) -{ - VARIABLE_POINTER_TRACK Variable; - EFI_STATUS Status; - EFI_PHYSICAL_ADDRESS NextVariable; - EFI_PHYSICAL_ADDRESS Point; - VARIABLE_GLOBAL *VariableGlobal; - UINT32 Instance; - UINT32 KeyIndex; - UINT64 MonotonicCount; - UINTN PayloadSize; - - // - // Check input parameters - // - if (VariableName =3D=3D NULL || VariableName[0] =3D=3D 0 || VendorGuid = =3D=3D NULL) { - return EFI_INVALID_PARAMETER; - } =20 - - if (DataSize !=3D 0 && Data =3D=3D NULL) { - return EFI_INVALID_PARAMETER; - } - - // - // EFI_VARIABLE_RUNTIME_ACCESS bit cannot be set without EFI_VARIABLE_BO= OTSERVICE_ACCESS bit. - // - if ((Attributes & (EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVIC= E_ACCESS)) =3D=3D EFI_VARIABLE_RUNTIME_ACCESS) { - return EFI_INVALID_PARAMETER; - } - - if ((Attributes & EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS) =3D=3D EFI_VA= RIABLE_AUTHENTICATED_WRITE_ACCESS) { - if (DataSize < AUTHINFO_SIZE) { - // - // Try to write Authencated Variable without AuthInfo - // - return EFI_SECURITY_VIOLATION; - }=20 - PayloadSize =3D DataSize - AUTHINFO_SIZE;=20 - } else { - PayloadSize =3D DataSize;=20 - } - - =20 - if ((UINTN)(~0) - PayloadSize < StrSize(VariableName)){ - // - // Prevent whole variable size overflow=20 - //=20 - return EFI_INVALID_PARAMETER; - } - - VariableGlobal =3D &Global->VariableGlobal[VirtualMode]; - Instance =3D Global->FvbInstance; - - if ((Attributes & EFI_VARIABLE_HARDWARE_ERROR_RECORD) =3D=3D EFI_VARIABL= E_HARDWARE_ERROR_RECORD) { - // - // For variable for hardware error record, the size of the VariableNam= e, including the Unicode Null - // in bytes plus the DataSize is limited to maximum size of PcdGet32(P= cdMaxHardwareErrorVariableSize) bytes. - // - if (StrSize (VariableName) + PayloadSize > PcdGet32(PcdMaxHardwareErro= rVariableSize) - sizeof (AUTHENTICATED_VARIABLE_HEADER)) { - return EFI_INVALID_PARAMETER; - } - // - // According to UEFI spec, HARDWARE_ERROR_RECORD variable name convent= ion should be L"HwErrRecXXXX" - // - if (StrnCmp (VariableName, \ - Global->VariableName[VirtualMode][VAR_HW_ERR_REC], \ - StrLen(Global->VariableName[VirtualMode][VAR_HW_ERR_REC])= ) !=3D 0) { - return EFI_INVALID_PARAMETER; - } - } else { - // - // For variable not for hardware error record, the size of the Variabl= eName, including the - // Unicode Null in bytes plus the DataSize is limited to maximum size = of PcdGet32(PcdMaxVariableSize) bytes. - // - if (StrSize (VariableName) + PayloadSize > PcdGet32(PcdMaxVariableSize= ) - sizeof (AUTHENTICATED_VARIABLE_HEADER)) { - return EFI_INVALID_PARAMETER; - } =20 - } =20 - - AcquireLockOnlyAtBootTime(&VariableGlobal->VariableServicesLock); - - // - // Consider reentrant in MCA/INIT/NMI. It needs be reupdated; - // - if (InterlockedIncrement (&Global->ReentrantState) > 1) { - Point =3D VariableGlobal->NonVolatileVariableBase;; - // - // Parse non-volatile variable data and get last variable offset - // - NextVariable =3D GetStartPointer (Point); - while (IsValidVariableHeader (NextVariable, FALSE, VariableGlobal, Ins= tance, NULL)) { - NextVariable =3D GetNextVariablePtr (NextVariable, FALSE, VariableGl= obal, Instance); - } - Global->NonVolatileLastVariableOffset =3D NextVariable - Point; - } - - // - // Check whether the input variable exists - // - - Status =3D FindVariable (VariableName, VendorGuid, &Variable, VariableGl= obal, Instance); - - // - // Hook the operation of setting PlatformLangCodes/PlatformLang and Lang= Codes/Lang - // - AutoUpdateLangVariable (VariableName, Data, PayloadSize, VirtualMode, Gl= obal); - - // - // Process PK, KEK, Sigdb seperately - // - if (CompareGuid (VendorGuid, Global->GlobalVariableGuid[VirtualMode]) &&= (StrCmp (VariableName, Global->VariableName[VirtualMode][VAR_PLATFORM_KEY]= ) =3D=3D 0)) { - Status =3D ProcessVarWithPk (VariableName, VendorGuid, Data, DataSize,= VirtualMode, Global, &Variable, Attributes, TRUE); - } else if (CompareGuid (VendorGuid, Global->GlobalVariableGuid[VirtualMo= de]) && (StrCmp (VariableName, Global->VariableName[VirtualMode][VAR_KEY_EX= CHANGE_KEY]) =3D=3D 0)) { - Status =3D ProcessVarWithPk (VariableName, VendorGuid, Data, DataSize,= VirtualMode, Global, &Variable, Attributes, FALSE); - } else if (CompareGuid (VendorGuid, Global->ImageSecurityDatabaseGuid[Vi= rtualMode])) { - Status =3D ProcessVarWithKek (VariableName, VendorGuid, Data, DataSize= , VirtualMode, Global, &Variable, Attributes); - } else { - Status =3D VerifyVariable (Data, DataSize, VirtualMode, Global, &Varia= ble, Attributes, &KeyIndex, &MonotonicCount); - if (!EFI_ERROR(Status)) { - // - // Verification pass - // - if ((Attributes & EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS) !=3D 0) { - // - // Cut the certificate size before set - // - Status =3D UpdateVariable ( - VariableName,=20 - VendorGuid,=20 - (UINT8*)Data + AUTHINFO_SIZE,=20 - DataSize - AUTHINFO_SIZE,=20 - Attributes,=20 - KeyIndex,=20 - MonotonicCount,=20 - VirtualMode,=20 - Global,=20 - &Variable - ); - } else { - // - // Update variable as usual=20 - // - Status =3D UpdateVariable ( - VariableName,=20 - VendorGuid,=20 - Data,=20 - DataSize,=20 - Attributes,=20 - 0,=20 - 0,=20 - VirtualMode,=20 - Global,=20 - &Variable - ); - } - } - } - - InterlockedDecrement (&Global->ReentrantState); - ReleaseLockOnlyAtBootTime (&VariableGlobal->VariableServicesLock); - return Status; -} - -/** - Implements EsalQueryVariableInfo function of Extended SAL Variable Servi= ces Class. - - This function implements EsalQueryVariableInfo function of Extended SAL = Variable Services Class. - It is equivalent in functionality to the EFI Runtime Service QueryVariab= leInfo(). - - @param[in] Attributes Attributes bitmask to specify t= he type of variables - on which to return information. - @param[out] MaximumVariableStorageSize On output the maximum size of t= he storage space available for=20 - the EFI variables associated wi= th the attributes specified. =20 - @param[out] RemainingVariableStorageSize Returns the remaining size of t= he storage space available for EFI=20 - variables associated with the a= ttributes specified. - @param[out] MaximumVariableSize Returns the maximum size of an = individual EFI variable=20 - associated with the attributes = specified. - @param[in] VirtualMode Current calling mode for this f= unction - @param[in] Global Context of this Extended SAL Va= riable Services Class call - - @retval EFI_SUCCESS Valid answer returned. - @retval EFI_INVALID_PARAMETER An invalid combination of attri= bute bits was supplied. - @retval EFI_UNSUPPORTED The attribute is not supported = on this platform, and the=20 - MaximumVariableStorageSize, Rem= ainingVariableStorageSize,=20 - MaximumVariableSize are undefin= ed. -**/ -EFI_STATUS -EFIAPI -EsalQueryVariableInfo ( - IN UINT32 Attributes, - OUT UINT64 *MaximumVariableStorageSize, - OUT UINT64 *RemainingVariableStorageSize, - OUT UINT64 *MaximumVariableSize, - IN BOOLEAN VirtualMode, - IN ESAL_VARIABLE_GLOBAL *Global - ) -{ - EFI_PHYSICAL_ADDRESS Variable; - EFI_PHYSICAL_ADDRESS NextVariable; - UINT64 VariableSize; - EFI_PHYSICAL_ADDRESS VariableStoreHeaderAddress; - BOOLEAN Volatile; - VARIABLE_STORE_HEADER VarStoreHeader; - AUTHENTICATED_VARIABLE_HEADER VariableHeader; - UINT64 CommonVariableTotalSize; - UINT64 HwErrVariableTotalSize; - VARIABLE_GLOBAL *VariableGlobal; - UINT32 Instance; - - CommonVariableTotalSize =3D 0; - HwErrVariableTotalSize =3D 0; - - if(MaximumVariableStorageSize =3D=3D NULL || RemainingVariableStorageSiz= e =3D=3D NULL || MaximumVariableSize =3D=3D NULL || Attributes =3D=3D 0) { - return EFI_INVALID_PARAMETER; - } - =20 - if((Attributes & (EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_A= CCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_HARDWARE_ERROR_RECORD)) = =3D=3D 0) { - // - // Make sure the Attributes combination is supported by the platform. - // - return EFI_UNSUPPORTED; =20 - } else if ((Attributes & (EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOO= TSERVICE_ACCESS)) =3D=3D EFI_VARIABLE_RUNTIME_ACCESS) { - // - // Make sure if runtime bit is set, boot service bit is set also. - // - return EFI_INVALID_PARAMETER; - } else if (EfiAtRuntime () && ((Attributes & EFI_VARIABLE_RUNTIME_ACCESS= ) =3D=3D 0)) { - // - // Make sure RT Attribute is set if we are in Runtime phase. - // - return EFI_INVALID_PARAMETER; - } else if ((Attributes & (EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_HARDW= ARE_ERROR_RECORD)) =3D=3D EFI_VARIABLE_HARDWARE_ERROR_RECORD) { - // - // Make sure Hw Attribute is set with NV. - // - return EFI_INVALID_PARAMETER; - } - - VariableGlobal =3D &Global->VariableGlobal[VirtualMode]; - Instance =3D Global->FvbInstance; - - AcquireLockOnlyAtBootTime(&VariableGlobal->VariableServicesLock); - - if((Attributes & EFI_VARIABLE_NON_VOLATILE) =3D=3D 0) { - // - // Query is Volatile related. - // - Volatile =3D TRUE; - VariableStoreHeaderAddress =3D VariableGlobal->VolatileVariableBase; - } else { - // - // Query is Non-Volatile related. - // - Volatile =3D FALSE; - VariableStoreHeaderAddress =3D VariableGlobal->NonVolatileVariableBase= ; - } - - // - // Now let's fill *MaximumVariableStorageSize *RemainingVariableStorageS= ize - // with the storage size (excluding the storage header size). - // - GetVarStoreHeader (VariableStoreHeaderAddress, Volatile, VariableGlobal,= Instance, &VarStoreHeader); - - *MaximumVariableStorageSize =3D VarStoreHeader.Size - sizeof (VARIABLE= _STORE_HEADER); - - // Harware error record variable needs larger size. - // - if ((Attributes & (EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_HARDWARE_ERR= OR_RECORD)) =3D=3D (EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_HARDWARE_ERROR= _RECORD)) { - *MaximumVariableStorageSize =3D PcdGet32(PcdHwErrStorageSize); - *MaximumVariableSize =3D PcdGet32(PcdMaxHardwareErrorVariableSize) - s= izeof (AUTHENTICATED_VARIABLE_HEADER); - } else { - if ((Attributes & EFI_VARIABLE_NON_VOLATILE) !=3D 0) { - ASSERT (PcdGet32(PcdHwErrStorageSize) < VarStoreHeader.Size); - *MaximumVariableStorageSize =3D VarStoreHeader.Size - sizeof (VARIAB= LE_STORE_HEADER) - PcdGet32(PcdHwErrStorageSize); - } - - // - // Let *MaximumVariableSize be PcdGet32(PcdMaxVariableSize) with the e= xception of the variable header size. - // - *MaximumVariableSize =3D PcdGet32(PcdMaxVariableSize) - sizeof (AUTHEN= TICATED_VARIABLE_HEADER); - } - - // - // Point to the starting address of the variables. - // - Variable =3D GetStartPointer (VariableStoreHeaderAddress); - - // - // Now walk through the related variable store. - // - while (IsValidVariableHeader (Variable, Volatile, VariableGlobal, Instan= ce, &VariableHeader) && - (Variable < GetEndPointer (VariableStoreHeaderAddress, Volatile, = VariableGlobal, Instance))) { - NextVariable =3D GetNextVariablePtr (Variable, Volatile, VariableGloba= l, Instance); - VariableSize =3D NextVariable - Variable; - - if (EfiAtRuntime ()) { - // - // we don't take the state of the variables in mind - // when calculating RemainingVariableStorageSize, - // since the space occupied by variables not marked with - // VAR_ADDED is not allowed to be reclaimed in Runtime. - // - if ((VariableHeader.Attributes & EFI_VARIABLE_HARDWARE_ERROR_RECORD)= =3D=3D EFI_VARIABLE_HARDWARE_ERROR_RECORD) { - HwErrVariableTotalSize +=3D VariableSize; - } else { - CommonVariableTotalSize +=3D VariableSize; - } - } else { - // - // Only care about Variables with State VAR_ADDED,because - // the space not marked as VAR_ADDED is reclaimable now. - // - if (VariableHeader.State =3D=3D VAR_ADDED) { - if ((VariableHeader.Attributes & EFI_VARIABLE_HARDWARE_ERROR_RECOR= D) =3D=3D EFI_VARIABLE_HARDWARE_ERROR_RECORD) { - HwErrVariableTotalSize +=3D VariableSize; - } else { - CommonVariableTotalSize +=3D VariableSize; - } - } - } - - // - // Go to the next one - // - Variable =3D NextVariable; - } - - if ((Attributes & EFI_VARIABLE_HARDWARE_ERROR_RECORD) =3D=3D EFI_VARIAB= LE_HARDWARE_ERROR_RECORD){ - *RemainingVariableStorageSize =3D *MaximumVariableStorageSize - HwErrV= ariableTotalSize; - }else { - *RemainingVariableStorageSize =3D *MaximumVariableStorageSize - Common= VariableTotalSize; - } - - if (*RemainingVariableStorageSize < sizeof (AUTHENTICATED_VARIABLE_HEADE= R)) { - *MaximumVariableSize =3D 0; - } else if ((*RemainingVariableStorageSize - sizeof (AUTHENTICATED_VARIAB= LE_HEADER)) < *MaximumVariableSize) { - *MaximumVariableSize =3D *RemainingVariableStorageSize - sizeof (AUTHE= NTICATED_VARIABLE_HEADER); - } - - ReleaseLockOnlyAtBootTime (&VariableGlobal->VariableServicesLock); - return EFI_SUCCESS; -} - -/** - Notification function of EVT_GROUP_READY_TO_BOOT event group. - - This is a notification function registered on EVT_GROUP_READY_TO_BOOT ev= ent group. - When the Boot Manager is about to load and execute a boot option, it rec= laims variable - storage if free size is below the threshold. - - @param[in] Event Event whose notification function is being invo= ked. - @param[in] Context Pointer to the notification function's context. - -**/ -VOID -EFIAPI -ReclaimForOS( - IN EFI_EVENT Event, - IN VOID *Context - ) -{ - UINT32 VarSize; - EFI_STATUS Status; - UINTN CommonVariableSpace; - UINTN RemainingCommonVariableSpace; - UINTN RemainingHwErrVariableSpace; - - VarSize =3D ((VARIABLE_STORE_HEADER *) ((UINTN) mVariableModuleGlobal->V= ariableGlobal[Physical].NonVolatileVariableBase))->Size; - Status =3D EFI_SUCCESS;=20 - // - //Allowable max size of common variable storage space - // - CommonVariableSpace =3D VarSize - sizeof (VARIABLE_STORE_HEADER) - PcdGe= t32(PcdHwErrStorageSize); - - RemainingCommonVariableSpace =3D CommonVariableSpace - mVariableModuleGl= obal->CommonVariableTotalSize; -=20 - RemainingHwErrVariableSpace =3D PcdGet32 (PcdHwErrStorageSize) - mVariab= leModuleGlobal->HwErrVariableTotalSize; - // - // If the free area is below a threshold, then performs reclaim operatio= n. - // - if ((RemainingCommonVariableSpace < PcdGet32 (PcdMaxVariableSize)) - || ((PcdGet32 (PcdHwErrStorageSize) !=3D 0) &&=20 - (RemainingHwErrVariableSpace < PcdGet32 (PcdMaxHardwareErrorVariabl= eSize)))){ - Status =3D Reclaim ( - mVariableModuleGlobal->VariableGlobal[Physical].NonVolatile= VariableBase, - &mVariableModuleGlobal->NonVolatileLastVariableOffset, - FALSE, - Physical, - mVariableModuleGlobal, - 0x0 - ); - ASSERT_EFI_ERROR (Status); - } -} - -/** - Flush the HOB variable to NV variable storage. -**/ -VOID -FlushHob2Nv ( - VOID - ) -{ - EFI_STATUS Status; - VOID *GuidHob; - VARIABLE_STORE_HEADER *VariableStoreHeader; - AUTHENTICATED_VARIABLE_HEADER *VariableHeader; - // - // Get HOB variable store. - // - GuidHob =3D GetFirstGuidHob (&gEfiAuthenticatedVariableGuid); - if (GuidHob !=3D NULL) { - VariableStoreHeader =3D (VARIABLE_STORE_HEADER *) GET_GUID_HOB_DATA (G= uidHob); - if (CompareGuid (&VariableStoreHeader->Signature, &gEfiAuthenticatedVa= riableGuid) && - (VariableStoreHeader->Format =3D=3D VARIABLE_STORE_FORMATTED) && - (VariableStoreHeader->State =3D=3D VARIABLE_STORE_HEALTHY) - ) { - DEBUG ((EFI_D_INFO, "HOB Variable Store appears to be valid.\n")); - // - // Flush the HOB variable to NV Variable storage. - // - for ( VariableHeader =3D (AUTHENTICATED_VARIABLE_HEADER *) HEADER_AL= IGN (VariableStoreHeader + 1) - ; (VariableHeader < (AUTHENTICATED_VARIABLE_HEADER *) HEADER_ALI= GN ((UINTN) VariableStoreHeader + VariableStoreHeader->Size) - && - (VariableHeader->StartId =3D=3D VARIABLE_DATA)) - ; VariableHeader =3D (AUTHENTICATED_VARIABLE_HEADER *) HEADER_AL= IGN ((UINTN) (VariableHeader + 1) - + VariableHeader->NameSize + GET_PAD_SIZE (Vari= ableHeader->NameSize) - + VariableHeader->DataSize + GET_PAD_SIZE (Vari= ableHeader->DataSize) - ) - ) { - ASSERT (VariableHeader->State =3D=3D VAR_ADDED); - ASSERT ((VariableHeader->Attributes & EFI_VARIABLE_NON_VOLATILE) != =3D 0); - Status =3D EsalSetVariable ( - (CHAR16 *) (VariableHeader + 1), - &VariableHeader->VendorGuid, - VariableHeader->Attributes, - VariableHeader->DataSize, - (UINT8 *) (VariableHeader + 1) + VariableHeader->NameSi= ze + GET_PAD_SIZE (VariableHeader->NameSize), - Physical, - mVariableModuleGlobal - ); - ASSERT_EFI_ERROR (Status); - } - } - } -} - -/** - Initializes variable store area for non-volatile and volatile variable. - - This function allocates and initializes memory space for global context = of ESAL - variable service and variable store area for non-volatile and volatile v= ariable. - - @param[in] ImageHandle The Image handle of this driver. - @param[in] SystemTable The pointer of EFI_SYSTEM_TABLE. - - @retval EFI_SUCCESS Function successfully executed. - @retval EFI_OUT_OF_RESOURCES Fail to allocate enough memory resource. - -**/ -EFI_STATUS -VariableCommonInitialize ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable - ) -{ - EFI_STATUS Status; - EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader; - EFI_PHYSICAL_ADDRESS CurrPtr; - VARIABLE_STORE_HEADER *VolatileVariableStore; - VARIABLE_STORE_HEADER *VariableStoreHeader; - EFI_PHYSICAL_ADDRESS Variable; - EFI_PHYSICAL_ADDRESS NextVariable; - UINTN VariableSize; - UINT32 Instance; - EFI_PHYSICAL_ADDRESS FvVolHdr; - EFI_PHYSICAL_ADDRESS TempVariableStoreHeader; - EFI_GCD_MEMORY_SPACE_DESCRIPTOR GcdDescriptor; - UINT64 BaseAddress; - UINT64 Length; - UINTN Index; - UINT8 Data; - EFI_PHYSICAL_ADDRESS VariableStoreBase; - UINT64 VariableStoreLength; - EFI_EVENT ReadyToBootEvent; - UINTN ScratchSize; - - // - // Allocate memory for mVariableModuleGlobal - // - mVariableModuleGlobal =3D AllocateRuntimeZeroPool (sizeof (ESAL_VARIABLE= _GLOBAL)); - if (mVariableModuleGlobal =3D=3D NULL) { - return EFI_OUT_OF_RESOURCES; - } - - mVariableModuleGlobal->GlobalVariableGuid[Physical] =3D &gEfiGlobalVaria= bleGuid; - CopyMem ( - mVariableModuleGlobal->VariableName[Physical], - mVariableName, - sizeof (mVariableName) - ); - - EfiInitializeLock(&mVariableModuleGlobal->VariableGlobal[Physical].Varia= bleServicesLock, TPL_NOTIFY); - - // - // Note that in EdkII variable driver implementation, Hardware Error Rec= ord type variable - // is stored with common variable in the same NV region. So the platform= integrator should - // ensure that the value of PcdHwErrStorageSize is less than or equal to= the value of=20 - // PcdFlashNvStorageVariableSize. - // - ASSERT (PcdGet32(PcdHwErrStorageSize) <=3D PcdGet32 (PcdFlashNvStorageVa= riableSize)); - - // - // Allocate memory for volatile variable store - // - ScratchSize =3D MAX (PcdGet32 (PcdMaxVariableSize), PcdGet32 (PcdMaxHard= wareErrorVariableSize)); - VolatileVariableStore =3D AllocateRuntimePool (PcdGet32 (PcdVariableStor= eSize) + ScratchSize); - if (VolatileVariableStore =3D=3D NULL) { - FreePool (mVariableModuleGlobal); - return EFI_OUT_OF_RESOURCES; - } - - SetMem (VolatileVariableStore, PcdGet32 (PcdVariableStoreSize) + Scratch= Size, 0xff); - - // - // Variable Specific Data - // - mVariableModuleGlobal->VariableGlobal[Physical].VolatileVariableBase =3D= (EFI_PHYSICAL_ADDRESS) (UINTN) VolatileVariableStore; - mVariableModuleGlobal->VolatileLastVariableOffset =3D (UINTN) GetStartPo= inter ((EFI_PHYSICAL_ADDRESS) VolatileVariableStore) - (UINTN) VolatileVari= ableStore; - - CopyGuid (&VolatileVariableStore->Signature, &gEfiAuthenticatedVariableG= uid); - VolatileVariableStore->Size =3D PcdGet32 (PcdVaria= bleStoreSize); - VolatileVariableStore->Format =3D VARIABLE_STORE_FOR= MATTED; - VolatileVariableStore->State =3D VARIABLE_STORE_HEA= LTHY; - VolatileVariableStore->Reserved =3D 0; - VolatileVariableStore->Reserved1 =3D 0; - - // - // Get non volatile varaible store - // - TempVariableStoreHeader =3D (UINT64) PcdGet32 (PcdFlashNvStorageVariable= Base); - VariableStoreBase =3D TempVariableStoreHeader + \ - (((EFI_FIRMWARE_VOLUME_HEADER *) (UINTN) (Te= mpVariableStoreHeader)) -> HeaderLength); - VariableStoreLength =3D (UINT64) PcdGet32 (PcdFlashNvStorageVariableSize= ) - \ - (((EFI_FIRMWARE_VOLUME_HEADER *) (UINTN) (= TempVariableStoreHeader)) -> HeaderLength); - // - // Mark the variable storage region of the FLASH as RUNTIME - // - BaseAddress =3D VariableStoreBase & (~EFI_PAGE_MASK); - Length =3D VariableStoreLength + (VariableStoreBase - BaseAddress); - Length =3D (Length + EFI_PAGE_SIZE - 1) & (~EFI_PAGE_MASK); - - Status =3D gDS->GetMemorySpaceDescriptor (BaseAddress, &GcdDescript= or); - if (EFI_ERROR (Status)) { - goto Done; - } - - Status =3D gDS->SetMemorySpaceAttributes ( - BaseAddress, - Length, - GcdDescriptor.Attributes | EFI_MEMORY_RUNTIME - ); - if (EFI_ERROR (Status)) { - goto Done; - } - // - // Get address of non volatile variable store base. - // - mVariableModuleGlobal->VariableGlobal[Physical].NonVolatileVariableBase = =3D VariableStoreBase; - - // - // Check Integrity - // - // - // Find the Correct Instance of the FV Block Service. - // - Instance =3D 0; - CurrPtr =3D mVariableModuleGlobal->VariableGlobal[Physical].NonVolatil= eVariableBase; - - do { - FvVolHdr =3D 0; - Status =3D (EFI_STATUS) EsalCall ( - EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL= _GUID_LO, - EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL= _GUID_HI, - GetPhysicalAddressFunctionId,=20 - Instance,=20 - (UINT64) &FvVolHdr,=20 - 0,=20 - 0,=20 - 0,=20 - 0,=20 - 0 - ).Status; - if (EFI_ERROR (Status)) { - break; - } - FwVolHeader =3D (EFI_FIRMWARE_VOLUME_HEADER *) ((UINTN) FvVolHdr); - ASSERT (FwVolHeader !=3D NULL); - if (CurrPtr >=3D (EFI_PHYSICAL_ADDRESS) FwVolHeader && - CurrPtr < ((EFI_PHYSICAL_ADDRESS) FwVolHeader + FwVolHeader->FvLe= ngth)) { - mVariableModuleGlobal->FvbInstance =3D Instance; - break; - } - - Instance++; - } while (Status =3D=3D EFI_SUCCESS); - - VariableStoreHeader =3D (VARIABLE_STORE_HEADER *) CurrPtr; - if (GetVariableStoreStatus (VariableStoreHeader) =3D=3D EfiValid) { - if (~VariableStoreHeader->Size =3D=3D 0) { - Status =3D AccessVariableStore ( - TRUE, - &mVariableModuleGlobal->VariableGlobal[Physical], - FALSE, - mVariableModuleGlobal->FvbInstance, - (UINTN) &VariableStoreHeader->Size, - sizeof (UINT32), - (UINT8 *) &VariableStoreLength - ); - // - // As Variables are stored in NV storage, which are slow devices,suc= h as flash. - // Variable operation may skip checking variable program result to i= mprove performance, - // We can assume Variable program is OK through some check point. - // Variable Store Size Setting should be the first Variable write op= eration, - // We can assume all Read/Write is OK if we can set Variable store s= ize successfully. - // If write fail, we will assert here. - // - ASSERT(VariableStoreHeader->Size =3D=3D VariableStoreLength); - - if (EFI_ERROR (Status)) { - goto Done; - } - } - - mVariableModuleGlobal->VariableGlobal[Physical].NonVolatileVariableBas= e =3D (EFI_PHYSICAL_ADDRESS) ((UINTN) CurrPtr); - // - // Parse non-volatile variable data and get last variable offset. - // - Variable =3D GetStartPointer (CurrPtr); - Status =3D EFI_SUCCESS; - - while (IsValidVariableHeader (Variable, FALSE, &(mVariableModuleGlobal= ->VariableGlobal[Physical]), Instance, NULL)) { - NextVariable =3D GetNextVariablePtr ( - Variable, - FALSE, - &(mVariableModuleGlobal->VariableGlobal[Physical]), - Instance - ); - VariableSize =3D NextVariable - Variable; - if ((((AUTHENTICATED_VARIABLE_HEADER *)Variable)->Attributes & (EFI_= VARIABLE_NON_VOLATILE | EFI_VARIABLE_HARDWARE_ERROR_RECORD)) =3D=3D (EFI_VA= RIABLE_NON_VOLATILE | EFI_VARIABLE_HARDWARE_ERROR_RECORD)) { - mVariableModuleGlobal->HwErrVariableTotalSize +=3D VariableSize; - } else { - mVariableModuleGlobal->CommonVariableTotalSize +=3D VariableSize; - } - - Variable =3D NextVariable; - } - - mVariableModuleGlobal->NonVolatileLastVariableOffset =3D (UINTN) Varia= ble - (UINTN) CurrPtr; - - // - // Check if the free area is really free. - // - for (Index =3D mVariableModuleGlobal->NonVolatileLastVariableOffset; I= ndex < VariableStoreHeader->Size; Index++) { - Data =3D ((UINT8 *) (UINTN) mVariableModuleGlobal->VariableGlobal[Ph= ysical].NonVolatileVariableBase)[Index]; - if (Data !=3D 0xff) { - // - // There must be something wrong in variable store, do reclaim ope= ration. - // - Status =3D Reclaim ( - mVariableModuleGlobal->VariableGlobal[Physical].NonVola= tileVariableBase, - &mVariableModuleGlobal->NonVolatileLastVariableOffset, - FALSE, - Physical, - mVariableModuleGlobal, - 0x0 - ); - if (EFI_ERROR (Status)) { - goto Done; - } - break; - } - } - - // - // Register the event handling function to reclaim variable for OS usa= ge. - // - Status =3D EfiCreateEventReadyToBootEx ( - TPL_NOTIFY,=20 - ReclaimForOS,=20 - NULL,=20 - &ReadyToBootEvent - ); - } else { - Status =3D EFI_VOLUME_CORRUPTED; - DEBUG((EFI_D_ERROR, "Variable Store header is corrupted\n")); - } - -Done: - if (EFI_ERROR (Status)) { - FreePool (mVariableModuleGlobal); - FreePool (VolatileVariableStore); - } - - return Status; -} diff --git a/SecurityPkg/VariableAuthenticated/EsalVariableDxeSal/Variable.= h b/SecurityPkg/VariableAuthenticated/EsalVariableDxeSal/Variable.h deleted file mode 100644 index b32ef741bf..0000000000 --- a/SecurityPkg/VariableAuthenticated/EsalVariableDxeSal/Variable.h +++ /dev/null @@ -1,505 +0,0 @@ -/** @file - Internal header file for Extended SAL variable service module. - -Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved.
-This program and the accompanying materials=20 -are licensed and made available under the terms and conditions of the BSD = License=20 -which accompanies this distribution. The full text of the license may be = found at=20 -http://opensource.org/licenses/bsd-license.php - -THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,=20 -WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLI= ED. - -**/ - -#ifndef _VARIABLE_H_ -#define _VARIABLE_H_ - -#include - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define MAX_NAME_SIZE 0x100 -#define NUM_VAR_NAME 9 // Number of pre-defined variable name= to be referenced -#define VAR_PLATFORM_LANG_CODES 0 // Index of "PlatformLangCodes" variab= le -#define VAR_LANG_CODES 1 // Index of "LangCodes" variable -#define VAR_PLATFORM_LANG 2 // Index of "PlatformLang" variable -#define VAR_LANG 3 // Index of "Lang" variable -#define VAR_HW_ERR_REC 4 // Index of "HwErrRecXXXX" variable -#define VAR_AUTH_KEY_DB 5 // Index of "AuthVarKeyDatabase" varia= ble -#define VAR_SETUP_MODE 6 // Index of "SetupMode" variable -#define VAR_PLATFORM_KEY 7 // Index of "PK" variable -#define VAR_KEY_EXCHANGE_KEY 8 // Index of "KEK" variable - -/// -/// "AuthVarKeyDatabase" variable for the Public Key store. -/// -#define AUTHVAR_KEYDB_NAME L"AuthVarKeyDatabase" -#define AUTHVAR_KEYDB_NAME_SIZE 38 - -/// -/// The maximum size of the public key database, restricted by maximum ind= ividal EFI=20 -/// varible size, and excluding the variable header and name size. -/// -#define MAX_KEYDB_SIZE (FixedPcdGet32 (PcdMaxVariableSize) - sizeof (AUTH= ENTICATED_VARIABLE_HEADER) - AUTHVAR_KEYDB_NAME_SIZE) -#define MAX_KEY_NUM (MAX_KEYDB_SIZE / EFI_CERT_TYPE_RSA2048_SIZE) - -/// -/// The size of a 3 character ISO639 language code. -/// -#define ISO_639_2_ENTRY_SIZE 3 - -typedef enum { - Physical, - Virtual -} VARIABLE_POINTER_TYPE; - -typedef struct { - EFI_PHYSICAL_ADDRESS CurrPtr; - EFI_PHYSICAL_ADDRESS EndPtr; - EFI_PHYSICAL_ADDRESS StartPtr; - BOOLEAN Volatile; -} VARIABLE_POINTER_TRACK; - -typedef struct { - EFI_PHYSICAL_ADDRESS VolatileVariableBase; - EFI_PHYSICAL_ADDRESS NonVolatileVariableBase; - EFI_LOCK VariableServicesLock; -} VARIABLE_GLOBAL; - -typedef struct { - VARIABLE_GLOBAL VariableGlobal[2]; - CHAR16 *VariableName[2][NUM_VAR_NAME]; - EFI_GUID *GlobalVariableGuid[2]; - UINTN VolatileLastVariableOffset; - UINTN NonVolatileLastVariableOffset; - UINTN CommonVariableTotalSize; - UINTN HwErrVariableTotalSize; - CHAR8 *PlatformLangCodes[2]; - CHAR8 *LangCodes[2]; - CHAR8 *PlatformLang[2]; - CHAR8 Lang[ISO_639_2_ENTRY_SIZE + 1]; - UINT32 FvbInstance; - UINT32 ReentrantState; - EFI_GUID *AuthenticatedVariableGuid[2]; - EFI_GUID *CertRsa2048Sha256Guid[2]; - EFI_GUID *ImageSecurityDatabaseGuid[2]; - VOID *HashContext[2]; // Hash context pointer - UINT8 KeyList[MAX_KEYDB_SIZE]; // Cached Platform Key list - UINT8 PubKeyStore[MAX_KEYDB_SIZE]; // Cached Public Key list -} ESAL_VARIABLE_GLOBAL; - -typedef struct { - EFI_GUID *Guid; - CHAR16 *Name; - UINT32 Attributes; - UINTN DataSize; - VOID *Data; -} VARIABLE_CACHE_ENTRY; - - -extern ESAL_VARIABLE_GLOBAL *mVariableModuleGlobal; - -// -// Functions -// - -/** - Initializes variable store area for non-volatile and volatile variable. - - This function allocates and initializes memory space for global context = of ESAL - variable service and variable store area for non-volatile and volatile v= ariable. - - @param[in] ImageHandle The Image handle of this driver. - @param[in] SystemTable The pointer of EFI_SYSTEM_TABLE. - - @retval EFI_SUCCESS Function successfully executed. - @retval EFI_OUT_OF_RESOURCES Failed to allocate enough memory resource. - -**/ -EFI_STATUS -VariableCommonInitialize ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable - ); - -/** - Entry point of Extended SAL Variable service module. - - This function is the entry point of Extended SAL Variable service module= . - It registers all functions of Extended SAL Variable class, initializes - variable store for non-volatile and volatile variables, and registers - notification function for EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE event. - - @param[in] ImageHandle The Image handle of this driver. - @param[in] SystemTable The pointer of EFI_SYSTEM_TABLE. - - @retval EFI_SUCCESS Extended SAL Variable Services Class successfu= lly registered. - -**/ -EFI_STATUS -EFIAPI -VariableServiceInitialize ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable - ); - -/** - Notification function of EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE. - - This is a notification function registered on EVT_SIGNAL_VIRTUAL_ADDRESS= _CHANGE event. - It convers pointer to new virtual address. - - @param[in] Event The event whose notification function is being = invoked. - @param[in] Context The pointer to the notification function's cont= ext. - -**/ -VOID -EFIAPI -VariableClassAddressChangeEvent ( - IN EFI_EVENT Event, - IN VOID *Context - ); - -/** - Implements EsalGetVariable function of Extended SAL Variable Services Cl= ass. - - This function implements EsalGetVariable function of Extended SAL Variab= le Services Class. - It is equivalent in functionality to the EFI Runtime Service GetVariable= (). - =20 - @param[in] VariableName A Null-terminated Unicode string that is= the name of - the vendor's variable. - @param[in] VendorGuid A unique identifier for the vendor. - @param[out] Attributes If not NULL, a pointer to the memory loc= ation to return the=20 - attributes bitmask for the variable. - @param[in, out] DataSize Size of Data found. If size is less than= the - data, this value contains the required s= ize. - @param[out] Data On input, the size in bytes of the retur= n Data buffer. =20 - On output, the size of data returned in = Data. - @param[in] VirtualMode Current calling mode for this function. - @param[in] Global Context of this Extended SAL Variable Se= rvices Class call. - - @retval EFI_SUCCESS The function completed successfully.=20 - @retval EFI_NOT_FOUND The variable was not found. - @retval EFI_BUFFER_TOO_SMALL DataSize is too small for the result. Da= taSize has=20 - been updated with the size needed to comp= lete the request. - @retval EFI_INVALID_PARAMETER VariableName is NULL. - @retval EFI_INVALID_PARAMETER VendorGuid is NULL. - @retval EFI_INVALID_PARAMETER DataSize is NULL. - @retval EFI_INVALID_PARAMETER DataSize is not too small and Data is NUL= L. - @retval EFI_DEVICE_ERROR The variable could not be retrieved due t= o a hardware error. - @retval EFI_SECURITY_VIOLATION The variable could not be retrieved due t= o an authentication failure. - -**/ -EFI_STATUS -EFIAPI -EsalGetVariable ( - IN CHAR16 *VariableName, - IN EFI_GUID *VendorGuid, - OUT UINT32 *Attributes OPTIONAL, - IN OUT UINTN *DataSize, - OUT VOID *Data, - IN BOOLEAN VirtualMode, - IN ESAL_VARIABLE_GLOBAL *Global - ); - -/** - Implements EsalGetNextVariableName function of Extended SAL Variable Ser= vices Class. - - This function implements EsalGetNextVariableName function of Extended SA= L Variable Services Class. - It is equivalent in functionality to the EFI Runtime Service GetNextVari= ableName(). - =20 - @param[in, out] VariableNameSize Size of the variable - @param[in, out] VariableName On input, supplies the last VariableNam= e that was returned by GetNextVariableName(). - On output, returns the Null-terminated = Unicode string of the current variable. - @param[in, out] VendorGuid On input, supplies the last VendorGuid = that was returned by GetNextVariableName(). - On output, returns the VendorGuid of th= e current variable. =20 - @param[in] VirtualMode Current calling mode for this function. - @param[in] Global Context of this Extended SAL Variable S= ervices Class call. - - @retval EFI_SUCCESS The function completed successfully.=20 - @retval EFI_NOT_FOUND The next variable was not found. - @retval EFI_BUFFER_TOO_SMALL VariableNameSize is too small for the re= sult.=20 - VariableNameSize has been updated with t= he size needed to complete the request. - @retval EFI_INVALID_PARAMETER VariableNameSize is NULL. - @retval EFI_INVALID_PARAMETER VariableName is NULL. - @retval EFI_INVALID_PARAMETER VendorGuid is NULL. - @retval EFI_DEVICE_ERROR The variable name could not be retrieved= due to a hardware error. - -**/ -EFI_STATUS -EFIAPI -EsalGetNextVariableName ( - IN OUT UINTN *VariableNameSize, - IN OUT CHAR16 *VariableName, - IN OUT EFI_GUID *VendorGuid, - IN BOOLEAN VirtualMode, - IN ESAL_VARIABLE_GLOBAL *Global - ); - -/** - Implements EsalSetVariable function of Extended SAL Variable Services Cl= ass. - - This function implements EsalSetVariable function of Extended SAL Variab= le Services Class. - It is equivalent in functionality to the EFI Runtime Service SetVariable= (). - =20 - @param[in] VariableName A Null-terminated Unicode string that is = the name of the vendor's - variable. Each VariableName is unique fo= r each=20 - VendorGuid. VariableName must contain 1 = or more=20 - Unicode characters. If VariableName is a= n empty Unicode=20 - string, then EFI_INVALID_PARAMETER is ret= urned. - @param[in] VendorGuid A unique identifier for the vendor. - @param[in] Attributes Attributes bitmask to set for the variabl= e. - @param[in] DataSize The size in bytes of the Data buffer. A = size of zero causes the - variable to be deleted. - @param[in] Data The contents for the variable. - @param[in] VirtualMode Current calling mode for this function. - @param[in] Global Context of this Extended SAL Variable Ser= vices Class call. - - @retval EFI_SUCCESS The firmware has successfully stored the = variable and its data as=20 - defined by the Attributes. - @retval EFI_INVALID_PARAMETER An invalid combination of attribute bits = was supplied, or the=20 - DataSize exceeds the maximum allowed. - @retval EFI_INVALID_PARAMETER VariableName is an empty Unicode string. - @retval EFI_OUT_OF_RESOURCES Not enough storage is available to hold t= he variable and its data. - @retval EFI_DEVICE_ERROR The variable could not be saved due to a = hardware failure. - @retval EFI_WRITE_PROTECTED The variable in question is read-only. - @retval EFI_WRITE_PROTECTED The variable in question cannot be delete= d. - @retval EFI_SECURITY_VIOLATION The variable could not be retrieved due t= o an authentication failure. - @retval EFI_NOT_FOUND The variable trying to be updated or dele= ted was not found. - -**/ -EFI_STATUS -EFIAPI -EsalSetVariable ( - IN CHAR16 *VariableName, - IN EFI_GUID *VendorGuid, - IN UINT32 Attributes, - IN UINTN DataSize, - IN VOID *Data, - IN BOOLEAN VirtualMode, - IN ESAL_VARIABLE_GLOBAL *Global - ); - -/** - Implements EsalQueryVariableInfo function of Extended SAL Variable Servi= ces Class. - - This function implements EsalQueryVariableInfo function of Extended SAL = Variable Services Class. - It is equivalent in functionality to the EFI Runtime Service QueryVariab= leInfo(). - - @param[in] Attributes Attributes bitmask to specify t= he type of variables - on which to return information. - @param[out] MaximumVariableStorageSize On output the maximum size of t= he storage space available for=20 - the EFI variables associated wi= th the attributes specified. =20 - @param[out] RemainingVariableStorageSize Returns the remaining size of t= he storage space available for EFI=20 - variables associated with the a= ttributes specified. - @param[out] MaximumVariableSize Returns the maximum size of an = individual EFI variable=20 - associated with the attributes = specified. - @param[in] VirtualMode Current calling mode for this f= unction - @param[in] Global Context of this Extended SAL Va= riable Services Class call - - @retval EFI_SUCCESS Valid answer returned. - @retval EFI_INVALID_PARAMETER An invalid combination of attri= bute bits was supplied. - @retval EFI_UNSUPPORTED The attribute is not supported = on this platform, and the=20 - MaximumVariableStorageSize, Rem= ainingVariableStorageSize,=20 - MaximumVariableSize are undefin= ed. -**/ -EFI_STATUS -EFIAPI -EsalQueryVariableInfo ( - IN UINT32 Attributes, - OUT UINT64 *MaximumVariableStorageSize, - OUT UINT64 *RemainingVariableStorageSize, - OUT UINT64 *MaximumVariableSize, - IN BOOLEAN VirtualMode, - IN ESAL_VARIABLE_GLOBAL *Global - ); - -/** - Writes a buffer to variable storage space. - - This function writes a buffer to variable storage space into firmware - volume block device. The destination is specified by parameter - VariableBase. Fault Tolerant Write protocol is used for writing. - - @param[in] VariableBase The base address of the variable to write. - @param[in] Buffer Points to the data buffer. - @param[in] BufferSize The number of bytes of the data Buffer. - - @retval EFI_SUCCESS The function completed successfully. - @retval EFI_NOT_FOUND Fail to locate Fault Tolerant Write protocol. - @retval Other The function could not complete successfully. - -**/ -EFI_STATUS -FtwVariableSpace ( - IN EFI_PHYSICAL_ADDRESS VariableBase, - IN UINT8 *Buffer, - IN UINTN BufferSize - ); - -/** - Finds variable in volatile and non-volatile storage areas. - - This code finds variable in volatile and non-volatile storage areas. - If VariableName is an empty string, then we just return the first - qualified variable without comparing VariableName and VendorGuid. - Otherwise, VariableName and VendorGuid are compared. - - @param[in] VariableName Name of the variable to be found. - @param[in] VendorGuid Vendor GUID to be found. - @param[out] PtrTrack VARIABLE_POINTER_TRACK structure for= output, - including the range searched and the= target position. - @param[in] Global Pointer to VARIABLE_GLOBAL structure= , including - base of volatile variable storage ar= ea, base of - NV variable storage area, and a lock= . - @param[in] Instance Instance of FV Block services. - - @retval EFI_INVALID_PARAMETER If VariableName is not an empty stri= ng, while - VendorGuid is NULL. - @retval EFI_SUCCESS Variable successfully found. - @retval EFI_INVALID_PARAMETER Variable not found. - -**/ -EFI_STATUS -FindVariable ( - IN CHAR16 *VariableName, - IN EFI_GUID *VendorGuid, - OUT VARIABLE_POINTER_TRACK *PtrTrack, - IN VARIABLE_GLOBAL *Global, - IN UINTN Instance - ); - -/** - Gets the pointer to variable data area. - - This function gets the pointer to variable data area. - The variable is specified by its variable header. - - @param[in] VariableAddress Start address of variable header. - @param[in] Volatile TRUE - Variable is volatile. - FALSE - Variable is non-volatile. - @param[in] Global Pointer to VARAIBLE_GLOBAL structure. - @param[in] Instance Instance of FV Block services. - @param[out] VariableData Buffer to hold variable data for output. - -**/ -VOID -GetVariableDataPtr ( - IN EFI_PHYSICAL_ADDRESS VariableAddress, - IN BOOLEAN Volatile, - IN VARIABLE_GLOBAL *Global, - IN UINTN Instance, - OUT CHAR16 *VariableData - ); - -/** - Gets the size of variable data area. - - This function gets the size of variable data area. - The variable is specified by its variable header. - If variable header contains raw data, just return 0. - - @param[in] Variable Pointer to the variable header. - - @return Size of variable data area in bytes. - -**/ -UINTN -DataSizeOfVariable ( - IN AUTHENTICATED_VARIABLE_HEADER *Variable - ); - -/** - Update the variable region with Variable information. These are the same= =20 - arguments as the EFI Variable services. - - @param[in] VariableName Name of variable. - @param[in] VendorGuid Guid of variable. - @param[in] Data Variable data. - @param[in] DataSize Size of data. 0 means delete. - @param[in] Attributes Attributes of the variable. - @param[in] KeyIndex Index of associated public key. - @param[in] MonotonicCount Value of associated monotonic count.=20 - @param[in] VirtualMode Current calling mode for this function. - @param[in] Global Context of this Extended SAL Variable Serv= ices Class call. - @param[in] Variable The variable information which is used to = keep track of variable usage. - - @retval EFI_SUCCESS The update operation is success. - @retval EFI_OUT_OF_RESOURCES Variable region is full, can not write oth= er data into this region. - -**/ -EFI_STATUS -EFIAPI -UpdateVariable ( - IN CHAR16 *VariableName, - IN EFI_GUID *VendorGuid, - IN VOID *Data, - IN UINTN DataSize, - IN UINT32 Attributes OPTIONAL, =20 - IN UINT32 KeyIndex OPTIONAL, - IN UINT64 MonotonicCount OPTIONAL, - IN BOOLEAN VirtualMode, - IN ESAL_VARIABLE_GLOBAL *Global, - IN VARIABLE_POINTER_TRACK *Variable - ); - -/** - Checks variable header. - - This function checks if variable header is valid or not. - - @param[in] VariableAddress Start address of variable header. - @param[in] Volatile TRUE - Variable is volatile. - FALSE - Variable is non-volatile. - @param[in] Global Pointer to VARAIBLE_GLOBAL structure. - @param[in] Instance Instance of FV Block services. - @param[out] VariableHeader Pointer to AUTHENTICATED_VARIABLE_HEADER = for output. - - @retval TRUE Variable header is valid. - @retval FALSE Variable header is not valid. - -**/ -BOOLEAN -IsValidVariableHeader ( - IN EFI_PHYSICAL_ADDRESS VariableAddress, - IN BOOLEAN Volatile, - IN VARIABLE_GLOBAL *Global, - IN UINTN Instance, - OUT AUTHENTICATED_VARIABLE_HEADER *VariableHeader OPTIONAL - ); - -/** - Flush the HOB variable to NV variable storage. -**/ -VOID -FlushHob2Nv ( - VOID - ); - -#endif diff --git a/SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBo= otConfigDxe.inf b/SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/Sec= ureBootConfigDxe.inf index fa7c39d6e5..cd97ae29a4 100644 --- a/SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootConfi= gDxe.inf +++ b/SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootConfi= gDxe.inf @@ -23,7 +23,7 @@ UNLOAD_IMAGE =3D SecureBootConfigDriverUnload =20 # -# VALID_ARCHITECTURES =3D IA32 X64 IPF EBC +# VALID_ARCHITECTURES =3D IA32 X64 EBC # =20 [Sources] --=20 2.16.2.windows.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel