mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-30 00:54:06 +02:00
MdeModulePkg/SecurityPkg: Update TreePei to handle FvInfo2 and update FwVol of PeiCore to always install both FvInfo and FvInfo2.
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Star Zeng <star.zeng@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com> Reviewed-by: Chao Zhang <chao.b.zhang@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15467 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
a78167a641
commit
387208ab04
@ -1,7 +1,7 @@
|
|||||||
/** @file
|
/** @file
|
||||||
Pei Core Firmware File System service routines.
|
Pei Core Firmware File System service routines.
|
||||||
|
|
||||||
Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
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
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
@ -525,6 +525,7 @@ FirmwareVolmeInfoPpiNotifyCallback (
|
|||||||
UINTN FvIndex;
|
UINTN FvIndex;
|
||||||
EFI_PEI_FILE_HANDLE FileHandle;
|
EFI_PEI_FILE_HANDLE FileHandle;
|
||||||
VOID *DepexData;
|
VOID *DepexData;
|
||||||
|
BOOLEAN IsFvInfo2;
|
||||||
|
|
||||||
Status = EFI_SUCCESS;
|
Status = EFI_SUCCESS;
|
||||||
PrivateData = PEI_CORE_INSTANCE_FROM_PS_THIS (PeiServices);
|
PrivateData = PEI_CORE_INSTANCE_FROM_PS_THIS (PeiServices);
|
||||||
@ -540,12 +541,14 @@ FirmwareVolmeInfoPpiNotifyCallback (
|
|||||||
// It is FvInfo2PPI.
|
// It is FvInfo2PPI.
|
||||||
//
|
//
|
||||||
CopyMem (&FvInfo2Ppi, Ppi, sizeof (EFI_PEI_FIRMWARE_VOLUME_INFO2_PPI));
|
CopyMem (&FvInfo2Ppi, Ppi, sizeof (EFI_PEI_FIRMWARE_VOLUME_INFO2_PPI));
|
||||||
|
IsFvInfo2 = TRUE;
|
||||||
} else {
|
} else {
|
||||||
//
|
//
|
||||||
// It is FvInfoPPI.
|
// It is FvInfoPPI.
|
||||||
//
|
//
|
||||||
CopyMem (&FvInfo2Ppi, Ppi, sizeof (EFI_PEI_FIRMWARE_VOLUME_INFO_PPI));
|
CopyMem (&FvInfo2Ppi, Ppi, sizeof (EFI_PEI_FIRMWARE_VOLUME_INFO_PPI));
|
||||||
FvInfo2Ppi.AuthenticationStatus = 0;
|
FvInfo2Ppi.AuthenticationStatus = 0;
|
||||||
|
IsFvInfo2 = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -572,6 +575,10 @@ FirmwareVolmeInfoPpiNotifyCallback (
|
|||||||
//
|
//
|
||||||
for (FvIndex = 0; FvIndex < PrivateData->FvCount; FvIndex ++) {
|
for (FvIndex = 0; FvIndex < PrivateData->FvCount; FvIndex ++) {
|
||||||
if (PrivateData->Fv[FvIndex].FvHandle == FvHandle) {
|
if (PrivateData->Fv[FvIndex].FvHandle == FvHandle) {
|
||||||
|
if (IsFvInfo2 && (FvInfo2Ppi.AuthenticationStatus != PrivateData->Fv[FvIndex].AuthenticationStatus)) {
|
||||||
|
PrivateData->Fv[FvIndex].AuthenticationStatus = FvInfo2Ppi.AuthenticationStatus;
|
||||||
|
DEBUG ((EFI_D_INFO, "Update AuthenticationStatus of the %dth FV to 0x%x!\n", FvIndex, FvInfo2Ppi.AuthenticationStatus));
|
||||||
|
}
|
||||||
DEBUG ((EFI_D_INFO, "The Fv %p has already been processed!\n", FvInfo2Ppi.FvInfo));
|
DEBUG ((EFI_D_INFO, "The Fv %p has already been processed!\n", FvInfo2Ppi.FvInfo));
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -1337,8 +1344,16 @@ ProcessFvFile (
|
|||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Install FvInfo2 Ppi and Build FvHob
|
// Install FvInfo(2) Ppi
|
||||||
//
|
//
|
||||||
|
PeiServicesInstallFvInfoPpi (
|
||||||
|
&FvHeader->FileSystemGuid,
|
||||||
|
(VOID**) FvHeader,
|
||||||
|
(UINT32) FvHeader->FvLength,
|
||||||
|
&ParentFvImageInfo.FvName,
|
||||||
|
&FileInfo.FileName
|
||||||
|
);
|
||||||
|
|
||||||
PeiServicesInstallFvInfo2Ppi (
|
PeiServicesInstallFvInfo2Ppi (
|
||||||
&FvHeader->FileSystemGuid,
|
&FvHeader->FileSystemGuid,
|
||||||
(VOID**) FvHeader,
|
(VOID**) FvHeader,
|
||||||
|
@ -461,6 +461,7 @@ FirmwareVolmeInfoPpiNotifyCallback (
|
|||||||
EFI_PEI_FIRMWARE_VOLUME_INFO_PPI *Fv;
|
EFI_PEI_FIRMWARE_VOLUME_INFO_PPI *Fv;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
EFI_PEI_FIRMWARE_VOLUME_PPI *FvPpi;
|
EFI_PEI_FIRMWARE_VOLUME_PPI *FvPpi;
|
||||||
|
UINTN Index;
|
||||||
|
|
||||||
Fv = (EFI_PEI_FIRMWARE_VOLUME_INFO_PPI *) Ppi;
|
Fv = (EFI_PEI_FIRMWARE_VOLUME_INFO_PPI *) Ppi;
|
||||||
|
|
||||||
@ -485,6 +486,14 @@ FirmwareVolmeInfoPpiNotifyCallback (
|
|||||||
|
|
||||||
ASSERT (mMeasuredChildFvIndex < FixedPcdGet32 (PcdPeiCoreMaxFvSupported));
|
ASSERT (mMeasuredChildFvIndex < FixedPcdGet32 (PcdPeiCoreMaxFvSupported));
|
||||||
if (mMeasuredChildFvIndex < FixedPcdGet32 (PcdPeiCoreMaxFvSupported)) {
|
if (mMeasuredChildFvIndex < FixedPcdGet32 (PcdPeiCoreMaxFvSupported)) {
|
||||||
|
//
|
||||||
|
// Check whether FV is in the measured child FV list.
|
||||||
|
//
|
||||||
|
for (Index = 0; Index < mMeasuredChildFvIndex; Index++) {
|
||||||
|
if (mMeasuredChildFvInfo[Index].BlobBase == (EFI_PHYSICAL_ADDRESS) (UINTN) Fv->FvInfo) {
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
}
|
||||||
mMeasuredChildFvInfo[mMeasuredChildFvIndex].BlobBase = (EFI_PHYSICAL_ADDRESS) (UINTN) Fv->FvInfo;
|
mMeasuredChildFvInfo[mMeasuredChildFvIndex].BlobBase = (EFI_PHYSICAL_ADDRESS) (UINTN) Fv->FvInfo;
|
||||||
mMeasuredChildFvInfo[mMeasuredChildFvIndex].BlobLength = Fv->FvInfoSize;
|
mMeasuredChildFvInfo[mMeasuredChildFvIndex].BlobLength = Fv->FvInfoSize;
|
||||||
mMeasuredChildFvIndex++;
|
mMeasuredChildFvIndex++;
|
||||||
|
@ -16,6 +16,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||||||
|
|
||||||
#include <IndustryStandard/UefiTcgPlatform.h>
|
#include <IndustryStandard/UefiTcgPlatform.h>
|
||||||
#include <Ppi/FirmwareVolumeInfo.h>
|
#include <Ppi/FirmwareVolumeInfo.h>
|
||||||
|
#include <Ppi/FirmwareVolumeInfo2.h>
|
||||||
#include <Ppi/LockPhysicalPresence.h>
|
#include <Ppi/LockPhysicalPresence.h>
|
||||||
#include <Ppi/TpmInitialized.h>
|
#include <Ppi/TpmInitialized.h>
|
||||||
#include <Ppi/FirmwareVolume.h>
|
#include <Ppi/FirmwareVolume.h>
|
||||||
@ -112,6 +113,11 @@ EFI_PEI_NOTIFY_DESCRIPTOR mNotifyList[] = {
|
|||||||
&gEfiPeiFirmwareVolumeInfoPpiGuid,
|
&gEfiPeiFirmwareVolumeInfoPpiGuid,
|
||||||
FirmwareVolmeInfoPpiNotifyCallback
|
FirmwareVolmeInfoPpiNotifyCallback
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK,
|
||||||
|
&gEfiPeiFirmwareVolumeInfo2PpiGuid,
|
||||||
|
FirmwareVolmeInfoPpiNotifyCallback
|
||||||
|
},
|
||||||
{
|
{
|
||||||
(EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
|
(EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
|
||||||
&gEfiEndOfPeiSignalPpiGuid,
|
&gEfiEndOfPeiSignalPpiGuid,
|
||||||
@ -518,6 +524,7 @@ FirmwareVolmeInfoPpiNotifyCallback (
|
|||||||
EFI_PEI_FIRMWARE_VOLUME_INFO_PPI *Fv;
|
EFI_PEI_FIRMWARE_VOLUME_INFO_PPI *Fv;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
EFI_PEI_FIRMWARE_VOLUME_PPI *FvPpi;
|
EFI_PEI_FIRMWARE_VOLUME_PPI *FvPpi;
|
||||||
|
UINTN Index;
|
||||||
|
|
||||||
Fv = (EFI_PEI_FIRMWARE_VOLUME_INFO_PPI *) Ppi;
|
Fv = (EFI_PEI_FIRMWARE_VOLUME_INFO_PPI *) Ppi;
|
||||||
|
|
||||||
@ -542,6 +549,14 @@ FirmwareVolmeInfoPpiNotifyCallback (
|
|||||||
|
|
||||||
ASSERT (mMeasuredChildFvIndex < FixedPcdGet32 (PcdPeiCoreMaxFvSupported));
|
ASSERT (mMeasuredChildFvIndex < FixedPcdGet32 (PcdPeiCoreMaxFvSupported));
|
||||||
if (mMeasuredChildFvIndex < FixedPcdGet32 (PcdPeiCoreMaxFvSupported)) {
|
if (mMeasuredChildFvIndex < FixedPcdGet32 (PcdPeiCoreMaxFvSupported)) {
|
||||||
|
//
|
||||||
|
// Check whether FV is in the measured child FV list.
|
||||||
|
//
|
||||||
|
for (Index = 0; Index < mMeasuredChildFvIndex; Index++) {
|
||||||
|
if (mMeasuredChildFvInfo[Index].BlobBase == (EFI_PHYSICAL_ADDRESS) (UINTN) Fv->FvInfo) {
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
}
|
||||||
mMeasuredChildFvInfo[mMeasuredChildFvIndex].BlobBase = (EFI_PHYSICAL_ADDRESS) (UINTN) Fv->FvInfo;
|
mMeasuredChildFvInfo[mMeasuredChildFvIndex].BlobBase = (EFI_PHYSICAL_ADDRESS) (UINTN) Fv->FvInfo;
|
||||||
mMeasuredChildFvInfo[mMeasuredChildFvIndex].BlobLength = Fv->FvInfoSize;
|
mMeasuredChildFvInfo[mMeasuredChildFvIndex].BlobLength = Fv->FvInfoSize;
|
||||||
mMeasuredChildFvIndex++;
|
mMeasuredChildFvIndex++;
|
||||||
|
@ -53,6 +53,7 @@
|
|||||||
|
|
||||||
[Ppis]
|
[Ppis]
|
||||||
gEfiPeiFirmwareVolumeInfoPpiGuid
|
gEfiPeiFirmwareVolumeInfoPpiGuid
|
||||||
|
gEfiPeiFirmwareVolumeInfo2PpiGuid
|
||||||
gEfiPeiFirmwareVolumeInfoMeasurementExcludedPpiGuid
|
gEfiPeiFirmwareVolumeInfoMeasurementExcludedPpiGuid
|
||||||
gPeiTpmInitializedPpiGuid
|
gPeiTpmInitializedPpiGuid
|
||||||
gEfiEndOfPeiSignalPpiGuid
|
gEfiEndOfPeiSignalPpiGuid
|
||||||
|
Loading…
x
Reference in New Issue
Block a user