mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-27 15:44:04 +02:00
MdeModulePkg/IntelFrameworkModulePkg FwVol:
Move the check of FV Header signature and file system to GetFwVolHeader() to avoid reading the whole unexpected FvHeader. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Star Zeng <star.zeng@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16255 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
24903bc48a
commit
4888d15e74
@ -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 - 2012, 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
|
are licensed and made available under the terms and conditions
|
||||||
@ -34,6 +34,8 @@
|
|||||||
@retval EFI_SUCCESS Successfully read volume header to the allocated
|
@retval EFI_SUCCESS Successfully read volume header to the allocated
|
||||||
buffer.
|
buffer.
|
||||||
@retval EFI_ACCESS_DENIED Read status of FV is not enabled.
|
@retval EFI_ACCESS_DENIED Read status of FV is not enabled.
|
||||||
|
@retval EFI_INVALID_PARAMETER The FV Header signature is not as expected or
|
||||||
|
the file system could not be understood.
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
GetFwVolHeader (
|
GetFwVolHeader (
|
||||||
@ -90,6 +92,22 @@ GetFwVolHeader (
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate FV Header signature, if not as expected, continue.
|
||||||
|
//
|
||||||
|
if (TempFvh.Signature != EFI_FVH_SIGNATURE) {
|
||||||
|
return EFI_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Check to see that the file system is indeed formatted in a way we can
|
||||||
|
// understand it...
|
||||||
|
//
|
||||||
|
if ((!CompareGuid (&TempFvh.FileSystemGuid, &gEfiFirmwareFileSystem2Guid)) &&
|
||||||
|
(!CompareGuid (&TempFvh.FileSystemGuid, &gEfiFirmwareFileSystem3Guid))) {
|
||||||
|
return EFI_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
*FwVolHeader = AllocatePool (TempFvh.HeaderLength);
|
*FwVolHeader = AllocatePool (TempFvh.HeaderLength);
|
||||||
if (*FwVolHeader == NULL) {
|
if (*FwVolHeader == NULL) {
|
||||||
return EFI_OUT_OF_RESOURCES;
|
return EFI_OUT_OF_RESOURCES;
|
||||||
@ -669,15 +687,6 @@ FwVolDriverInit (
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
ASSERT (FwVolHeader != NULL);
|
ASSERT (FwVolHeader != NULL);
|
||||||
//
|
|
||||||
// Check to see that the file system is indeed formatted in a way we can
|
|
||||||
// understand it...
|
|
||||||
//
|
|
||||||
if ((!CompareGuid (&FwVolHeader->FileSystemGuid, &gEfiFirmwareFileSystem2Guid)) &&
|
|
||||||
(!CompareGuid (&FwVolHeader->FileSystemGuid, &gEfiFirmwareFileSystem3Guid))) {
|
|
||||||
FreePool (FwVolHeader);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
FreePool (FwVolHeader);
|
FreePool (FwVolHeader);
|
||||||
|
|
||||||
Reinstall = FALSE;
|
Reinstall = FALSE;
|
||||||
|
@ -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 - 2012, 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
|
are licensed and made available under the terms and conditions
|
||||||
@ -484,6 +484,8 @@ IsValidFFSFile (
|
|||||||
@retval EFI_SUCCESS Successfully read volume header to the allocated
|
@retval EFI_SUCCESS Successfully read volume header to the allocated
|
||||||
buffer.
|
buffer.
|
||||||
@retval EFI_ACCESS_DENIED Read status of FV is not enabled.
|
@retval EFI_ACCESS_DENIED Read status of FV is not enabled.
|
||||||
|
@retval EFI_INVALID_PARAMETER The FV Header signature is not as expected or
|
||||||
|
the file system could not be understood.
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
GetFwVolHeader (
|
GetFwVolHeader (
|
||||||
|
@ -2595,6 +2595,8 @@ ReadFvbData (
|
|||||||
@retval EFI_OUT_OF_RESOURCES No enough buffer could be allocated.
|
@retval EFI_OUT_OF_RESOURCES No enough buffer could be allocated.
|
||||||
@retval EFI_SUCCESS Successfully read volume header to the allocated
|
@retval EFI_SUCCESS Successfully read volume header to the allocated
|
||||||
buffer.
|
buffer.
|
||||||
|
@retval EFI_INVALID_PARAMETER The FV Header signature is not as expected or
|
||||||
|
the file system could not be understood.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
|
@ -173,6 +173,8 @@ ReadFvbData (
|
|||||||
@retval EFI_OUT_OF_RESOURCES No enough buffer could be allocated.
|
@retval EFI_OUT_OF_RESOURCES No enough buffer could be allocated.
|
||||||
@retval EFI_SUCCESS Successfully read volume header to the allocated
|
@retval EFI_SUCCESS Successfully read volume header to the allocated
|
||||||
buffer.
|
buffer.
|
||||||
|
@retval EFI_INVALID_PARAMETER The FV Header signature is not as expected or
|
||||||
|
the file system could not be understood.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
@ -199,6 +201,22 @@ GetFwVolHeader (
|
|||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate FV Header signature, if not as expected, continue.
|
||||||
|
//
|
||||||
|
if (TempFvh.Signature != EFI_FVH_SIGNATURE) {
|
||||||
|
return EFI_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Check to see that the file system is indeed formatted in a way we can
|
||||||
|
// understand it...
|
||||||
|
//
|
||||||
|
if ((!CompareGuid (&TempFvh.FileSystemGuid, &gEfiFirmwareFileSystem2Guid)) &&
|
||||||
|
(!CompareGuid (&TempFvh.FileSystemGuid, &gEfiFirmwareFileSystem3Guid))) {
|
||||||
|
return EFI_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Allocate a buffer for the caller
|
// Allocate a buffer for the caller
|
||||||
//
|
//
|
||||||
@ -658,29 +676,11 @@ NotifyFwVolBlock (
|
|||||||
}
|
}
|
||||||
ASSERT (FwVolHeader != NULL);
|
ASSERT (FwVolHeader != NULL);
|
||||||
|
|
||||||
//
|
|
||||||
// Validate FV Header signature, if not as expected, continue.
|
|
||||||
//
|
|
||||||
if (FwVolHeader->Signature != EFI_FVH_SIGNATURE) {
|
|
||||||
CoreFreePool (FwVolHeader);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!VerifyFvHeaderChecksum (FwVolHeader)) {
|
if (!VerifyFvHeaderChecksum (FwVolHeader)) {
|
||||||
CoreFreePool (FwVolHeader);
|
CoreFreePool (FwVolHeader);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// Check to see that the file system is indeed formatted in a way we can
|
|
||||||
// understand it...
|
|
||||||
//
|
|
||||||
if ((!CompareGuid (&FwVolHeader->FileSystemGuid, &gEfiFirmwareFileSystem2Guid)) &&
|
|
||||||
(!CompareGuid (&FwVolHeader->FileSystemGuid, &gEfiFirmwareFileSystem3Guid))) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Check if there is an FV protocol already installed in that handle
|
// Check if there is an FV protocol already installed in that handle
|
||||||
//
|
//
|
||||||
|
@ -405,25 +405,4 @@ IsValidFfsFile (
|
|||||||
IN EFI_FFS_FILE_HEADER *FfsHeader
|
IN EFI_FFS_FILE_HEADER *FfsHeader
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
given the supplied FW_VOL_BLOCK_PROTOCOL, allocate a buffer for output and
|
|
||||||
copy the volume header into it.
|
|
||||||
|
|
||||||
@param Fvb The FW_VOL_BLOCK_PROTOCOL instance from which to
|
|
||||||
read the volume header
|
|
||||||
@param FwVolHeader Pointer to pointer to allocated buffer in which
|
|
||||||
the volume header is returned.
|
|
||||||
|
|
||||||
@retval EFI_OUT_OF_RESOURCES No enough buffer could be allocated.
|
|
||||||
@retval EFI_SUCCESS Successfully read volume header to the allocated
|
|
||||||
buffer.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
GetFwVolHeader (
|
|
||||||
IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *Fvb,
|
|
||||||
OUT EFI_FIRMWARE_VOLUME_HEADER **FwVolHeader
|
|
||||||
);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user