From 4888d15e74628fd373605d5d853fa3b172aeadc3 Mon Sep 17 00:00:00 2001 From: Star Zeng Date: Wed, 29 Oct 2014 03:31:46 +0000 Subject: 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 Reviewed-by: Liming Gao git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16255 6f19259b-4bc3-4df7-8a09-765794883524 --- .../Universal/FirmwareVolume/FwVolDxe/FwVol.c | 29 ++++++++++++++-------- .../FirmwareVolume/FwVolDxe/FwVolDriver.h | 4 ++- 2 files changed, 22 insertions(+), 11 deletions(-) (limited to 'IntelFrameworkModulePkg') diff --git a/IntelFrameworkModulePkg/Universal/FirmwareVolume/FwVolDxe/FwVol.c b/IntelFrameworkModulePkg/Universal/FirmwareVolume/FwVolDxe/FwVol.c index ecee616397..2ba09c49b5 100644 --- a/IntelFrameworkModulePkg/Universal/FirmwareVolume/FwVolDxe/FwVol.c +++ b/IntelFrameworkModulePkg/Universal/FirmwareVolume/FwVolDxe/FwVol.c @@ -4,7 +4,7 @@ Layers on top of Firmware Block protocol to produce a file abstraction of FV based files. - Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.
+ Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made available under the terms and conditions @@ -34,6 +34,8 @@ @retval EFI_SUCCESS Successfully read volume header to the allocated buffer. @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 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); if (*FwVolHeader == NULL) { return EFI_OUT_OF_RESOURCES; @@ -669,15 +687,6 @@ FwVolDriverInit ( continue; } 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); Reinstall = FALSE; diff --git a/IntelFrameworkModulePkg/Universal/FirmwareVolume/FwVolDxe/FwVolDriver.h b/IntelFrameworkModulePkg/Universal/FirmwareVolume/FwVolDxe/FwVolDriver.h index e424f9572d..3f637c16ea 100644 --- a/IntelFrameworkModulePkg/Universal/FirmwareVolume/FwVolDxe/FwVolDriver.h +++ b/IntelFrameworkModulePkg/Universal/FirmwareVolume/FwVolDxe/FwVolDriver.h @@ -1,7 +1,7 @@ /** @file Common defines and definitions for a FwVolDxe driver. - Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.
+ Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.
This program and the accompanying materials 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 buffer. @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 GetFwVolHeader ( -- cgit v1.2.3