From b96fef9f4d47e6fe257b1048467a261ca28dac66 Mon Sep 17 00:00:00 2001 From: jljusten Date: Wed, 31 Aug 2011 18:58:35 +0000 Subject: EdkCompatibilityPkg: Add BootScriptThunkHelper driver Signed-off-by: jljusten Reviewed-by: rsun3 git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12247 6f19259b-4bc3-4df7-8a09-765794883524 --- .../BootScriptThunkHelper/BootScriptThunkHelper.c | 73 ++++++++++++++++++++++ .../BootScriptThunkHelper.inf | 52 +++++++++++++++ EdkCompatibilityPkg/EdkCompatibilityPkg.dsc | 2 + 3 files changed, 127 insertions(+) create mode 100644 EdkCompatibilityPkg/Compatibility/BootScriptThunkHelper/BootScriptThunkHelper.c create mode 100644 EdkCompatibilityPkg/Compatibility/BootScriptThunkHelper/BootScriptThunkHelper.inf diff --git a/EdkCompatibilityPkg/Compatibility/BootScriptThunkHelper/BootScriptThunkHelper.c b/EdkCompatibilityPkg/Compatibility/BootScriptThunkHelper/BootScriptThunkHelper.c new file mode 100644 index 0000000000..f20555d451 --- /dev/null +++ b/EdkCompatibilityPkg/Compatibility/BootScriptThunkHelper/BootScriptThunkHelper.c @@ -0,0 +1,73 @@ +/** @file + Boot Script Helper SMM driver. + + This driver is responsible to restoer BootScriptThunk from SMRAM to AcpiNvs for security considertion. + +Copyright (c) 2010, Intel Corporation. All rights reserved.
+ +This program and the accompanying materials +are licensed and made available under the terms and conditions +of the BSD 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 IMPLIED. + +**/ + +#include +#include +#include +#include +#include + +#include + +EFI_GUID mBootScriptThunkGuid = { + 0xa053f561, 0xf56b, 0x4140, {0x89, 0x1, 0xb4, 0xcb, 0x5d, 0x70, 0x92, 0x9e} +}; + +/** + Entry point function of the Boot Script Thunk Helper SMM driver. + + @param[in] ImageHandle The firmware allocated handle for the EFI image. + @param[in] SystemTable A pointer to the EFI System Table. + + @retval EFI_SUCCESS The entry point is executed successfully. + @retval other Some error occurs when executing this entry point. +**/ +EFI_STATUS +EFIAPI +BootScriptThunkHelperMain ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + BOOT_SCRIPT_THUNK_DATA *BootScriptThunkData; + EFI_STATUS Status; + + // + // Get BootScriptThunk variable + // + BootScriptThunkData = (BOOT_SCRIPT_THUNK_DATA *)(UINTN)PcdGet64(BootScriptThunkDataPtr); + ASSERT (BootScriptThunkData != NULL); + if (BootScriptThunkData == NULL) { + return EFI_NOT_FOUND; + } + + // + // Save BootScriptThunk image + // + Status = SaveLockBox ( + &mBootScriptThunkGuid, + (VOID *)(UINTN)BootScriptThunkData->BootScriptThunkBase, + (UINTN)BootScriptThunkData->BootScriptThunkLength + ); + ASSERT_EFI_ERROR (Status); + + Status = SetLockBoxAttributes (&mBootScriptThunkGuid, LOCK_BOX_ATTRIBUTE_RESTORE_IN_PLACE); + ASSERT_EFI_ERROR (Status); + + return Status; +} diff --git a/EdkCompatibilityPkg/Compatibility/BootScriptThunkHelper/BootScriptThunkHelper.inf b/EdkCompatibilityPkg/Compatibility/BootScriptThunkHelper/BootScriptThunkHelper.inf new file mode 100644 index 0000000000..f068d6fdb7 --- /dev/null +++ b/EdkCompatibilityPkg/Compatibility/BootScriptThunkHelper/BootScriptThunkHelper.inf @@ -0,0 +1,52 @@ +## @file +# Component description file for Boot Script Thunk Helper SMM driver. +# +# Copyright (c) 2010, Intel Corporation. All rights reserved.
+# +# This program and the accompanying materials +# are licensed and made available under the terms and conditions +# of the BSD 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 IMPLIED. +# +## + +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = BootScriptThunkHelper + FILE_GUID = E633E57C-BBB1-4c6a-9F45-22C49378ADD0 + MODULE_TYPE = DXE_DRIVER + VERSION_STRING = 1.0 + PI_SPECIFICATION_VERSION = 0x0001000A + ENTRY_POINT = BootScriptThunkHelperMain + +# +# The following information is for reference only and not required by the build tools. +# +# VALID_ARCHITECTURES = IA32 X64 +# + +[Sources] + BootScriptThunkHelper.c + +[Packages] + MdePkg/MdePkg.dec + IntelFrameworkPkg/IntelFrameworkPkg.dec + MdeModulePkg/MdeModulePkg.dec + EdkCompatibilityPkg/EdkCompatibilityPkg.dec + +[LibraryClasses] + UefiDriverEntryPoint + BaseLib + DebugLib + PcdLib + LockBoxLib + +[Pcd] + gEfiEdkCompatibilityPkgTokenSpaceGuid.BootScriptThunkDataPtr + +[Depex] + gEfiS3SaveStateProtocolGuid AND gEfiBootScriptSaveProtocolGuid AND gEfiLockBoxProtocolGuid diff --git a/EdkCompatibilityPkg/EdkCompatibilityPkg.dsc b/EdkCompatibilityPkg/EdkCompatibilityPkg.dsc index 37fb69588d..9abf7338df 100644 --- a/EdkCompatibilityPkg/EdkCompatibilityPkg.dsc +++ b/EdkCompatibilityPkg/EdkCompatibilityPkg.dsc @@ -71,6 +71,7 @@ define GCC_MACRO = -DEFI_SPECIFICATION_VERSION=0x00020000 -DPI_S DebugAgentLib|MdeModulePkg/Library/DebugAgentLibNull/DebugAgentLibNull.inf LocalApicLib|UefiCpuPkg/Library/BaseXApicX2ApicLib/BaseXApicX2ApicLib.inf DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf + LockBoxLib|MdeModulePkg/Library/LockBoxNullLib/LockBoxNullLib.inf [LibraryClasses.common.PEIM] MemoryAllocationLib|MdePkg/Library/PeiMemoryAllocationLib/PeiMemoryAllocationLib.inf @@ -282,6 +283,7 @@ define GCC_MACRO = -DEFI_SPECIFICATION_VERSION=0x00020000 -DPI_S EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/Library/DxePerformanceLib/DxePerformanceLib.inf # Use IA32/X64 specific AsmReadTsc (). EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/Library/PeiPerformanceLib/PeiPerformanceLib.inf # Use IA32/X64 specific AsmReadTsc (). EdkCompatibilityPkg/Compatibility/AcpiVariableHobOnSmramReserveHobThunk/AcpiVariableHobOnSmramReserveHobThunk.inf + EdkCompatibilityPkg/Compatibility/BootScriptThunkHelper/BootScriptThunkHelper.inf EdkCompatibilityPkg/Compatibility/MpServicesOnFrameworkMpServicesThunk/MpServicesOnFrameworkMpServicesThunk.inf EdkCompatibilityPkg/Compatibility/SmmBaseOnSmmBase2Thunk/SmmBaseOnSmmBase2Thunk.inf EdkCompatibilityPkg/Compatibility/SmmBaseHelper/SmmBaseHelper.inf -- cgit v1.2.3