mirror of https://github.com/acidanthera/audk.git
IntelFrameworkModulePkg FwVolDxe: Get FV auth status propagated from PEI
FV3 HOB was introduced by new (>= 1.5) PI spec, it is intended to be used to propagate PEI-phase FV authentication status to DXE. This patch is to update FwVolDxe to get the authentication status propagated from PEI-phase to DXE by FV3 HOB when producing FV protocol. Cc: Liming Gao <liming.gao@intel.com> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Star Zeng <star.zeng@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com>
This commit is contained in:
parent
c60370454e
commit
2331cab7d4
|
@ -4,7 +4,7 @@
|
||||||
Layers on top of Firmware Block protocol to produce a file abstraction
|
Layers on top of Firmware Block protocol to produce a file abstraction
|
||||||
of FV based files.
|
of FV based files.
|
||||||
|
|
||||||
Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2006 - 2017, 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
|
are licensed and made available under the terms and conditions
|
||||||
|
@ -195,7 +195,7 @@ FreeFvDeviceResource (
|
||||||
/**
|
/**
|
||||||
|
|
||||||
Firmware volume inherits authentication status from the FV image file and section(in another firmware volume)
|
Firmware volume inherits authentication status from the FV image file and section(in another firmware volume)
|
||||||
where it came from.
|
where it came from or propagated from PEI-phase.
|
||||||
|
|
||||||
@param FvDevice A pointer to the FvDevice.
|
@param FvDevice A pointer to the FvDevice.
|
||||||
|
|
||||||
|
@ -205,26 +205,30 @@ FwVolInheritAuthenticationStatus (
|
||||||
IN FV_DEVICE *FvDevice
|
IN FV_DEVICE *FvDevice
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
EFI_FIRMWARE_VOLUME_HEADER *CachedFvHeader;
|
EFI_FIRMWARE_VOLUME_HEADER *CachedFvHeader;
|
||||||
EFI_FIRMWARE_VOLUME_EXT_HEADER *CachedFvExtHeader;
|
EFI_FIRMWARE_VOLUME_EXT_HEADER *CachedFvExtHeader;
|
||||||
EFI_FIRMWARE_VOLUME2_PROTOCOL *ParentFvProtocol;
|
EFI_FIRMWARE_VOLUME2_PROTOCOL *ParentFvProtocol;
|
||||||
UINTN Key;
|
UINTN Key;
|
||||||
EFI_GUID FileNameGuid;
|
EFI_GUID FileNameGuid;
|
||||||
EFI_FV_FILETYPE FileType;
|
EFI_FV_FILETYPE FileType;
|
||||||
EFI_FV_FILE_ATTRIBUTES FileAttributes;
|
EFI_FV_FILE_ATTRIBUTES FileAttributes;
|
||||||
UINTN FileSize;
|
UINTN FileSize;
|
||||||
EFI_SECTION_TYPE SectionType;
|
EFI_SECTION_TYPE SectionType;
|
||||||
UINT32 AuthenticationStatus;
|
UINT32 AuthenticationStatus;
|
||||||
EFI_FIRMWARE_VOLUME_HEADER *FvHeader;
|
EFI_FIRMWARE_VOLUME_HEADER *FvHeader;
|
||||||
EFI_FIRMWARE_VOLUME_EXT_HEADER *FvExtHeader;
|
EFI_FIRMWARE_VOLUME_EXT_HEADER *FvExtHeader;
|
||||||
UINTN BufferSize;
|
UINTN BufferSize;
|
||||||
|
EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *Fvb;
|
||||||
CachedFvHeader = (EFI_FIRMWARE_VOLUME_HEADER *) (UINTN) FvDevice->CachedFv;
|
EFI_FVB_ATTRIBUTES_2 FvbAttributes;
|
||||||
|
EFI_PHYSICAL_ADDRESS BaseAddress;
|
||||||
|
EFI_PEI_HOB_POINTERS Fv3Hob;
|
||||||
|
|
||||||
if (FvDevice->Fv.ParentHandle != NULL) {
|
if (FvDevice->Fv.ParentHandle != NULL) {
|
||||||
|
CachedFvHeader = (EFI_FIRMWARE_VOLUME_HEADER *) (UINTN) FvDevice->CachedFv;
|
||||||
|
|
||||||
//
|
//
|
||||||
// By Parent Handle, find out the FV image file and section(in another firmware volume) where the firmware volume came from
|
// By Parent Handle, find out the FV image file and section(in another firmware volume) where the firmware volume came from
|
||||||
//
|
//
|
||||||
Status = gBS->HandleProtocol (FvDevice->Fv.ParentHandle, &gEfiFirmwareVolume2ProtocolGuid, (VOID **) &ParentFvProtocol);
|
Status = gBS->HandleProtocol (FvDevice->Fv.ParentHandle, &gEfiFirmwareVolume2ProtocolGuid, (VOID **) &ParentFvProtocol);
|
||||||
if (!EFI_ERROR (Status) && (ParentFvProtocol != NULL)) {
|
if (!EFI_ERROR (Status) && (ParentFvProtocol != NULL)) {
|
||||||
|
@ -258,7 +262,7 @@ FwVolInheritAuthenticationStatus (
|
||||||
if (!EFI_ERROR (Status)) {
|
if (!EFI_ERROR (Status)) {
|
||||||
if ((FvHeader->FvLength == CachedFvHeader->FvLength) &&
|
if ((FvHeader->FvLength == CachedFvHeader->FvLength) &&
|
||||||
(FvHeader->ExtHeaderOffset == CachedFvHeader->ExtHeaderOffset)) {
|
(FvHeader->ExtHeaderOffset == CachedFvHeader->ExtHeaderOffset)) {
|
||||||
if (FvHeader->ExtHeaderOffset !=0) {
|
if (FvHeader->ExtHeaderOffset != 0) {
|
||||||
//
|
//
|
||||||
// Both FVs contain extension header, then compare their FV Name GUID
|
// Both FVs contain extension header, then compare their FV Name GUID
|
||||||
//
|
//
|
||||||
|
@ -292,6 +296,35 @@ FwVolInheritAuthenticationStatus (
|
||||||
}
|
}
|
||||||
} while (TRUE);
|
} while (TRUE);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
Fvb = FvDevice->Fvb;
|
||||||
|
|
||||||
|
Status = Fvb->GetAttributes (Fvb, &FvbAttributes);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((FvbAttributes & EFI_FVB2_MEMORY_MAPPED) != 0) {
|
||||||
|
//
|
||||||
|
// Get volume base address
|
||||||
|
//
|
||||||
|
Status = Fvb->GetPhysicalAddress (Fvb, &BaseAddress);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Get the authentication status propagated from PEI-phase to DXE.
|
||||||
|
//
|
||||||
|
Fv3Hob.Raw = GetHobList ();
|
||||||
|
while ((Fv3Hob.Raw = GetNextHob (EFI_HOB_TYPE_FV3, Fv3Hob.Raw)) != NULL) {
|
||||||
|
if (Fv3Hob.FirmwareVolume3->BaseAddress == BaseAddress) {
|
||||||
|
FvDevice->AuthenticationStatus = Fv3Hob.FirmwareVolume3->AuthenticationStatus;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Fv3Hob.Raw = GET_NEXT_HOB (Fv3Hob);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/** @file
|
/** @file
|
||||||
Common defines and definitions for a FwVolDxe driver.
|
Common defines and definitions for a FwVolDxe driver.
|
||||||
|
|
||||||
Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2006 - 2017, 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
|
are licensed and made available under the terms and conditions
|
||||||
|
@ -33,6 +33,7 @@
|
||||||
#include <Library/BaseMemoryLib.h>
|
#include <Library/BaseMemoryLib.h>
|
||||||
#include <Library/MemoryAllocationLib.h>
|
#include <Library/MemoryAllocationLib.h>
|
||||||
#include <Library/UefiBootServicesTableLib.h>
|
#include <Library/UefiBootServicesTableLib.h>
|
||||||
|
#include <Library/HobLib.h>
|
||||||
|
|
||||||
#define FV_DEVICE_SIGNATURE SIGNATURE_32 ('_', 'F', 'V', '_')
|
#define FV_DEVICE_SIGNATURE SIGNATURE_32 ('_', 'F', 'V', '_')
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
# This driver produces Firmware Volume2 protocol with full services
|
# This driver produces Firmware Volume2 protocol with full services
|
||||||
# (read/write, get/set) based on Firmware Volume Block protocol.
|
# (read/write, get/set) based on Firmware Volume Block protocol.
|
||||||
#
|
#
|
||||||
# Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
|
# Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
|
||||||
#
|
#
|
||||||
# This program and the accompanying materials are
|
# This program and the accompanying materials are
|
||||||
# licensed and made available under the terms and conditions of the BSD License
|
# licensed and made available under the terms and conditions of the BSD License
|
||||||
|
@ -55,7 +55,7 @@
|
||||||
UefiLib
|
UefiLib
|
||||||
UefiDriverEntryPoint
|
UefiDriverEntryPoint
|
||||||
DebugLib
|
DebugLib
|
||||||
|
HobLib
|
||||||
|
|
||||||
[Guids]
|
[Guids]
|
||||||
gEfiFirmwareVolumeTopFileGuid ## CONSUMES ## File # VTF file
|
gEfiFirmwareVolumeTopFileGuid ## CONSUMES ## File # VTF file
|
||||||
|
|
Loading…
Reference in New Issue