diff options
author | zwei4 <david.wei@intel.com> | 2017-03-10 16:34:38 +0800 |
---|---|---|
committer | Guo Mang <mang.guo@intel.com> | 2017-05-09 13:03:12 +0800 |
commit | bf000b8c3af487eeb9374403a888b7837f149eec (patch) | |
tree | efdf3d02892f58560224ada1ee99c1977ffb253b /Platform/BroxtonPlatformPkg/Common | |
parent | 03ef874676a3bf61581996bcf3d8ded1866ddc05 (diff) | |
download | edk2-platforms-bf000b8c3af487eeb9374403a888b7837f149eec.tar.xz |
Add OBB verification code.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: zwei4 <david.wei@intel.com>
Diffstat (limited to 'Platform/BroxtonPlatformPkg/Common')
-rw-r--r-- | Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformPreMemPei/FvCallback.c | 47 | ||||
-rw-r--r-- | Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformPreMemPei/PlatformPreMemPei.inf | 3 |
2 files changed, 49 insertions, 1 deletions
diff --git a/Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformPreMemPei/FvCallback.c b/Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformPreMemPei/FvCallback.c index 91ac6f5e1e..6a2c9fd911 100644 --- a/Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformPreMemPei/FvCallback.c +++ b/Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformPreMemPei/FvCallback.c @@ -25,6 +25,7 @@ #include <Library/HeciMsgLib.h>
#include <Guid/FspHeaderFile.h>
#include <Library/FspWrapperApiLib.h>
+#include <Library/BpdtLib.h>
#include "FvCallback.h"
#define MAX_DIGEST_SIZE 64
@@ -416,8 +417,54 @@ GetFvNotifyCallback ( {
EFI_STATUS Status = EFI_SUCCESS;
EFI_BOOT_MODE BootMode;
+ BPDT_PAYLOAD_DATA *BpdtPayloadPtr;
+ EFI_HOB_GUID_TYPE *GuidHobPtr;
+ BPDT_HEADER *Bp1HdrPtr;
+ BPDT_HEADER *Bp2HdrPtr;
PeiServicesGetBootMode (&BootMode);
+
+ //
+ // If the Hob exists, then GetBpdtPayloadAddress() has already been called
+ // one or more times already, So we do not need to re-enter this flow.
+ //
+ GuidHobPtr = GetFirstGuidHob (&gEfiBpdtLibBp2DataGuid);
+ if (GuidHobPtr != NULL) {
+ DEBUG ((EFI_D_INFO, "GetFvNotifyCallback already called. Skipping.\n"));
+ return Status;
+ }
+
+ //
+ // Locate headers of both Boot partion 1 and 2
+ //
+ GetBootPartitionPointer (BootPart1, (VOID **)&Bp1HdrPtr);
+ GetBootPartitionPointer (BootPart2, (VOID **)&Bp2HdrPtr);
+ DEBUG ((DEBUG_INFO, "Signature BP1 = 0x%x BP2 = 0x%x\n",Bp1HdrPtr->Signature,Bp2HdrPtr->Signature));
+ if (Bp1HdrPtr->Signature != BPDT_SIGN_GREEN || Bp2HdrPtr->Signature != BPDT_SIGN_GREEN) {
+ DEBUG ((DEBUG_INFO, "FW Recovery needed. \n"));
+ }
+
+ //
+ // Get the OBB payload, shadow it, and check the hash before processing it.
+ //
+ GetBpdtPayloadData (BootPart2, BpdtObb, &BpdtPayloadPtr);
+
+#if (BOOT_GUARD_ENABLE == 1)
+ //
+ // For Normal boot, just verify OBB, since CSE does hash verify of both IBBL and IBB.
+ // IBBL check is done before bringing cores out of reset,
+ // IBB check is done during RBP and indicated by IBB_VERIFICATION_DONE in IBBL
+ //
+
+ if (BootMode != BOOT_ON_S3_RESUME) {
+ Status = LocateAndVerifyHashBpm (HashObb);
+ if (EFI_ERROR (Status)) {
+ DEBUG((EFI_D_ERROR, "Verify OBB failed, Status = %r\n", Status));
+ CpuDeadLoop();
+ }
+ }
+#endif
+
DEBUG ((EFI_D_INFO, "GetFvNotifyCallback: Processing OBB Payload.\n"));
ParseObbPayload ((UINT8*) PcdGet32 (PcdFlashObbPayloadMappedBase), PcdGet32 (PcdFlashObbPayloadSize), BootMode);
diff --git a/Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformPreMemPei/PlatformPreMemPei.inf b/Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformPreMemPei/PlatformPreMemPei.inf index 22e9de212c..2c3ba738e3 100644 --- a/Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformPreMemPei/PlatformPreMemPei.inf +++ b/Platform/BroxtonPlatformPkg/Common/PlatformSettings/PlatformPreMemPei/PlatformPreMemPei.inf @@ -34,7 +34,7 @@ # 2. MemoryCallback.c - Includes a memory call back function notified when
# MRC is done.
#
-# Copyright (c) 2012 - 2016, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2012 - 2017, Intel Corporation. All rights reserved.<BR>
#
# This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License
@@ -100,6 +100,7 @@ PeiPolicyInitLib
PeiVariableCacheLib
FspWrapperApiLib
+ BpdtLib
[Guids]
gEfiSetupVariableGuid
|