summaryrefslogtreecommitdiffstats
path: root/SignedCapsulePkg/Library/EdkiiSystemCapsuleLib/EdkiiSystemCapsuleLib.c
diff options
context:
space:
mode:
Diffstat (limited to 'SignedCapsulePkg/Library/EdkiiSystemCapsuleLib/EdkiiSystemCapsuleLib.c')
-rw-r--r--SignedCapsulePkg/Library/EdkiiSystemCapsuleLib/EdkiiSystemCapsuleLib.c446
1 files changed, 237 insertions, 209 deletions
diff --git a/SignedCapsulePkg/Library/EdkiiSystemCapsuleLib/EdkiiSystemCapsuleLib.c b/SignedCapsulePkg/Library/EdkiiSystemCapsuleLib/EdkiiSystemCapsuleLib.c
index 0f1444ba06..d65d988c75 100644
--- a/SignedCapsulePkg/Library/EdkiiSystemCapsuleLib/EdkiiSystemCapsuleLib.c
+++ b/SignedCapsulePkg/Library/EdkiiSystemCapsuleLib/EdkiiSystemCapsuleLib.c
@@ -30,9 +30,9 @@
#include <Protocol/FirmwareManagement.h>
-EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR *mImageFmpInfo;
-UINTN mImageFmpInfoSize;
-EFI_GUID mEdkiiSystemFirmwareFileGuid;
+EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR *mImageFmpInfo;
+UINTN mImageFmpInfoSize;
+EFI_GUID mEdkiiSystemFirmwareFileGuid;
/**
Check if a block of buffer is erased.
@@ -46,16 +46,16 @@ EFI_GUID mEdkiiSystemFirmwareFileGuid;
**/
BOOLEAN
IsBufferErased (
- IN UINT8 ErasePolarity,
- IN VOID *InBuffer,
- IN UINTN BufferSize
+ IN UINT8 ErasePolarity,
+ IN VOID *InBuffer,
+ IN UINTN BufferSize
)
{
- UINTN Count;
- UINT8 EraseByte;
- UINT8 *Buffer;
+ UINTN Count;
+ UINT8 EraseByte;
+ UINT8 *Buffer;
- if(ErasePolarity == 1) {
+ if (ErasePolarity == 1) {
EraseByte = 0xFF;
} else {
EraseByte = 0;
@@ -86,17 +86,17 @@ IsBufferErased (
**/
BOOLEAN
GetSectionByType (
- IN VOID *SectionBuffer,
- IN UINT32 SectionBufferSize,
- IN EFI_SECTION_TYPE SectionType,
- IN UINTN SectionInstance,
- OUT VOID **OutSectionBuffer,
- OUT UINTN *OutSectionSize
+ IN VOID *SectionBuffer,
+ IN UINT32 SectionBufferSize,
+ IN EFI_SECTION_TYPE SectionType,
+ IN UINTN SectionInstance,
+ OUT VOID **OutSectionBuffer,
+ OUT UINTN *OutSectionSize
)
{
- EFI_COMMON_SECTION_HEADER *SectionHeader;
- UINTN SectionSize;
- UINTN Instance;
+ EFI_COMMON_SECTION_HEADER *SectionHeader;
+ UINTN SectionSize;
+ UINTN Instance;
DEBUG ((DEBUG_INFO, "GetSectionByType - Buffer: 0x%08x - 0x%08x\n", SectionBuffer, SectionBufferSize));
@@ -108,20 +108,20 @@ GetSectionByType (
Instance = 0;
while ((UINTN)SectionHeader < (UINTN)SectionBuffer + SectionBufferSize) {
DEBUG ((DEBUG_INFO, "GetSectionByType - Section: 0x%08x\n", SectionHeader));
- if (IS_SECTION2(SectionHeader)) {
- SectionSize = SECTION2_SIZE(SectionHeader);
+ if (IS_SECTION2 (SectionHeader)) {
+ SectionSize = SECTION2_SIZE (SectionHeader);
} else {
- SectionSize = SECTION_SIZE(SectionHeader);
+ SectionSize = SECTION_SIZE (SectionHeader);
}
if (SectionHeader->Type == SectionType) {
if (Instance == SectionInstance) {
*OutSectionBuffer = (UINT8 *)SectionHeader;
- *OutSectionSize = SectionSize;
- DEBUG((DEBUG_INFO, "GetSectionByType - 0x%x - 0x%x\n", *OutSectionBuffer, *OutSectionSize));
+ *OutSectionSize = SectionSize;
+ DEBUG ((DEBUG_INFO, "GetSectionByType - 0x%x - 0x%x\n", *OutSectionBuffer, *OutSectionSize));
return TRUE;
} else {
- DEBUG((DEBUG_INFO, "GetSectionByType - find section instance %x\n", Instance));
+ DEBUG ((DEBUG_INFO, "GetSectionByType - find section instance %x\n", Instance));
Instance++;
}
} else {
@@ -134,7 +134,7 @@ GetSectionByType (
//
// Next Section
//
- SectionHeader = (EFI_COMMON_SECTION_HEADER *)((UINTN)SectionHeader + ALIGN_VALUE(SectionSize, 4));
+ SectionHeader = (EFI_COMMON_SECTION_HEADER *)((UINTN)SectionHeader + ALIGN_VALUE (SectionSize, 4));
}
return FALSE;
@@ -155,25 +155,25 @@ GetSectionByType (
**/
BOOLEAN
GetFfsByName (
- IN VOID *FdStart,
- IN UINTN FdSize,
- IN EFI_GUID *FileName,
- IN EFI_FV_FILETYPE Type,
- OUT VOID **OutFfsBuffer,
- OUT UINTN *OutFfsBufferSize
+ IN VOID *FdStart,
+ IN UINTN FdSize,
+ IN EFI_GUID *FileName,
+ IN EFI_FV_FILETYPE Type,
+ OUT VOID **OutFfsBuffer,
+ OUT UINTN *OutFfsBufferSize
)
{
- UINTN FvSize;
- EFI_FIRMWARE_VOLUME_HEADER *FvHeader;
- EFI_FIRMWARE_VOLUME_EXT_HEADER *FvExtHeader;
- EFI_FFS_FILE_HEADER *FfsHeader;
- UINT32 FfsSize;
- UINTN TestLength;
- BOOLEAN FvFound;
+ UINTN FvSize;
+ EFI_FIRMWARE_VOLUME_HEADER *FvHeader;
+ EFI_FIRMWARE_VOLUME_EXT_HEADER *FvExtHeader;
+ EFI_FFS_FILE_HEADER *FfsHeader;
+ UINT32 FfsSize;
+ UINTN TestLength;
+ BOOLEAN FvFound;
DEBUG ((DEBUG_INFO, "GetFfsByName - FV: 0x%08x - 0x%08x\n", (UINTN)FdStart, (UINTN)FdSize));
- FvFound = FALSE;
+ FvFound = FALSE;
FvHeader = (EFI_FIRMWARE_VOLUME_HEADER *)FdStart;
while ((UINTN)FvHeader < (UINTN)FdStart + FdSize - 1) {
FvSize = (UINTN)FdStart + FdSize - (UINTN)FvHeader;
@@ -182,12 +182,14 @@ GetFfsByName (
FvHeader = (EFI_FIRMWARE_VOLUME_HEADER *)((UINTN)FvHeader + SIZE_4KB);
continue;
}
- DEBUG((DEBUG_INFO, "checking FV....0x%08x - 0x%x\n", FvHeader, FvHeader->FvLength));
+
+ DEBUG ((DEBUG_INFO, "checking FV....0x%08x - 0x%x\n", FvHeader, FvHeader->FvLength));
FvFound = TRUE;
if (FvHeader->FvLength > FvSize) {
- DEBUG((DEBUG_ERROR, "GetFfsByName - FvSize: 0x%08x, MaxSize - 0x%08x\n", (UINTN)FvHeader->FvLength, (UINTN)FvSize));
+ DEBUG ((DEBUG_ERROR, "GetFfsByName - FvSize: 0x%08x, MaxSize - 0x%08x\n", (UINTN)FvHeader->FvLength, (UINTN)FvSize));
return FALSE;
}
+
FvSize = (UINTN)FvHeader->FvLength;
//
@@ -195,44 +197,47 @@ GetFfsByName (
//
if (FvHeader->ExtHeaderOffset != 0) {
FvExtHeader = (EFI_FIRMWARE_VOLUME_EXT_HEADER *)((UINT8 *)FvHeader + FvHeader->ExtHeaderOffset);
- FfsHeader = (EFI_FFS_FILE_HEADER *)((UINT8 *)FvExtHeader + FvExtHeader->ExtHeaderSize);
+ FfsHeader = (EFI_FFS_FILE_HEADER *)((UINT8 *)FvExtHeader + FvExtHeader->ExtHeaderSize);
} else {
FfsHeader = (EFI_FFS_FILE_HEADER *)((UINT8 *)FvHeader + FvHeader->HeaderLength);
}
- FfsHeader = (EFI_FFS_FILE_HEADER *)((UINTN)FvHeader + ALIGN_VALUE((UINTN)FfsHeader - (UINTN)FvHeader, 8));
+
+ FfsHeader = (EFI_FFS_FILE_HEADER *)((UINTN)FvHeader + ALIGN_VALUE ((UINTN)FfsHeader - (UINTN)FvHeader, 8));
while ((UINTN)FfsHeader < (UINTN)FvHeader + FvSize - 1) {
- DEBUG((DEBUG_INFO, "GetFfsByName - FFS: 0x%08x\n", FfsHeader));
+ DEBUG ((DEBUG_INFO, "GetFfsByName - FFS: 0x%08x\n", FfsHeader));
TestLength = (UINTN)((UINTN)FvHeader + FvSize - (UINTN)FfsHeader);
- if (TestLength > sizeof(EFI_FFS_FILE_HEADER)) {
- TestLength = sizeof(EFI_FFS_FILE_HEADER);
+ if (TestLength > sizeof (EFI_FFS_FILE_HEADER)) {
+ TestLength = sizeof (EFI_FFS_FILE_HEADER);
}
- if (IsBufferErased(1, FfsHeader, TestLength)) {
+
+ if (IsBufferErased (1, FfsHeader, TestLength)) {
break;
}
- if (IS_FFS_FILE2(FfsHeader)) {
- FfsSize = FFS_FILE2_SIZE(FfsHeader);
+ if (IS_FFS_FILE2 (FfsHeader)) {
+ FfsSize = FFS_FILE2_SIZE (FfsHeader);
} else {
- FfsSize = FFS_FILE_SIZE(FfsHeader);
+ FfsSize = FFS_FILE_SIZE (FfsHeader);
}
- if (CompareGuid(FileName, &FfsHeader->Name) &&
- ((Type == EFI_FV_FILETYPE_ALL) || (FfsHeader->Type == Type))) {
- *OutFfsBuffer = FfsHeader;
+ if (CompareGuid (FileName, &FfsHeader->Name) &&
+ ((Type == EFI_FV_FILETYPE_ALL) || (FfsHeader->Type == Type)))
+ {
+ *OutFfsBuffer = FfsHeader;
*OutFfsBufferSize = FfsSize;
return TRUE;
} else {
//
// Any other type is not allowed
//
- DEBUG((DEBUG_INFO, "GetFfsByName - other FFS type 0x%x, name %g\n", FfsHeader->Type, &FfsHeader->Name));
+ DEBUG ((DEBUG_INFO, "GetFfsByName - other FFS type 0x%x, name %g\n", FfsHeader->Type, &FfsHeader->Name));
}
//
// Next File
//
- FfsHeader = (EFI_FFS_FILE_HEADER *)((UINTN)FfsHeader + ALIGN_VALUE(FfsSize, 8));
+ FfsHeader = (EFI_FFS_FILE_HEADER *)((UINTN)FfsHeader + ALIGN_VALUE (FfsSize, 8));
}
//
@@ -242,8 +247,9 @@ GetFfsByName (
}
if (!FvFound) {
- DEBUG((DEBUG_ERROR, "GetFfsByName - NO FV Found\n"));
+ DEBUG ((DEBUG_ERROR, "GetFfsByName - NO FV Found\n"));
}
+
return FALSE;
}
@@ -261,29 +267,30 @@ GetFfsByName (
BOOLEAN
EFIAPI
ExtractDriverFvImage (
- IN VOID *AuthenticatedImage,
- IN UINTN AuthenticatedImageSize,
- OUT VOID **DriverFvImage,
- OUT UINTN *DriverFvImageSize
+ IN VOID *AuthenticatedImage,
+ IN UINTN AuthenticatedImageSize,
+ OUT VOID **DriverFvImage,
+ OUT UINTN *DriverFvImageSize
)
{
- BOOLEAN Result;
- UINT32 FileHeaderSize;
+ BOOLEAN Result;
+ UINT32 FileHeaderSize;
- *DriverFvImage = NULL;
+ *DriverFvImage = NULL;
*DriverFvImageSize = 0;
- Result = GetFfsByName(AuthenticatedImage, AuthenticatedImageSize, &gEdkiiSystemFmpCapsuleDriverFvFileGuid, EFI_FV_FILETYPE_RAW, DriverFvImage, DriverFvImageSize);
+ Result = GetFfsByName (AuthenticatedImage, AuthenticatedImageSize, &gEdkiiSystemFmpCapsuleDriverFvFileGuid, EFI_FV_FILETYPE_RAW, DriverFvImage, DriverFvImageSize);
if (!Result) {
return FALSE;
}
- if (IS_FFS_FILE2(*DriverFvImage)) {
- FileHeaderSize = sizeof(EFI_FFS_FILE_HEADER2);
+ if (IS_FFS_FILE2 (*DriverFvImage)) {
+ FileHeaderSize = sizeof (EFI_FFS_FILE_HEADER2);
} else {
- FileHeaderSize = sizeof(EFI_FFS_FILE_HEADER);
+ FileHeaderSize = sizeof (EFI_FFS_FILE_HEADER);
}
- *DriverFvImage = (UINT8 *)*DriverFvImage + FileHeaderSize;
+
+ *DriverFvImage = (UINT8 *)*DriverFvImage + FileHeaderSize;
*DriverFvImageSize = *DriverFvImageSize - FileHeaderSize;
return Result;
@@ -303,29 +310,30 @@ ExtractDriverFvImage (
BOOLEAN
EFIAPI
ExtractConfigImage (
- IN VOID *AuthenticatedImage,
- IN UINTN AuthenticatedImageSize,
- OUT VOID **ConfigImage,
- OUT UINTN *ConfigImageSize
+ IN VOID *AuthenticatedImage,
+ IN UINTN AuthenticatedImageSize,
+ OUT VOID **ConfigImage,
+ OUT UINTN *ConfigImageSize
)
{
- BOOLEAN Result;
- UINT32 FileHeaderSize;
+ BOOLEAN Result;
+ UINT32 FileHeaderSize;
- *ConfigImage = NULL;
+ *ConfigImage = NULL;
*ConfigImageSize = 0;
- Result = GetFfsByName(AuthenticatedImage, AuthenticatedImageSize, &gEdkiiSystemFmpCapsuleConfigFileGuid, EFI_FV_FILETYPE_RAW, ConfigImage, ConfigImageSize);
+ Result = GetFfsByName (AuthenticatedImage, AuthenticatedImageSize, &gEdkiiSystemFmpCapsuleConfigFileGuid, EFI_FV_FILETYPE_RAW, ConfigImage, ConfigImageSize);
if (!Result) {
return FALSE;
}
- if (IS_FFS_FILE2(*ConfigImage)) {
- FileHeaderSize = sizeof(EFI_FFS_FILE_HEADER2);
+ if (IS_FFS_FILE2 (*ConfigImage)) {
+ FileHeaderSize = sizeof (EFI_FFS_FILE_HEADER2);
} else {
- FileHeaderSize = sizeof(EFI_FFS_FILE_HEADER);
+ FileHeaderSize = sizeof (EFI_FFS_FILE_HEADER);
}
- *ConfigImage = (UINT8 *)*ConfigImage + FileHeaderSize;
+
+ *ConfigImage = (UINT8 *)*ConfigImage + FileHeaderSize;
*ConfigImageSize = *ConfigImageSize - FileHeaderSize;
return Result;
@@ -348,20 +356,20 @@ ExtractConfigImage (
BOOLEAN
EFIAPI
ExtractAuthenticatedImage (
- IN VOID *Image,
- IN UINTN ImageSize,
- OUT UINT32 *LastAttemptStatus,
- OUT VOID **AuthenticatedImage,
- OUT UINTN *AuthenticatedImageSize
+ IN VOID *Image,
+ IN UINTN ImageSize,
+ OUT UINT32 *LastAttemptStatus,
+ OUT VOID **AuthenticatedImage,
+ OUT UINTN *AuthenticatedImageSize
)
{
- EFI_FIRMWARE_IMAGE_AUTHENTICATION *ImageAuth;
- EFI_STATUS Status;
- GUID *CertType;
- VOID *PublicKeyData;
- UINTN PublicKeyDataLength;
+ EFI_FIRMWARE_IMAGE_AUTHENTICATION *ImageAuth;
+ EFI_STATUS Status;
+ GUID *CertType;
+ VOID *PublicKeyData;
+ UINTN PublicKeyDataLength;
- DEBUG((DEBUG_INFO, "ExtractAuthenticatedImage - Image: 0x%08x - 0x%08x\n", (UINTN)Image, (UINTN)ImageSize));
+ DEBUG ((DEBUG_INFO, "ExtractAuthenticatedImage - Image: 0x%08x - 0x%08x\n", (UINTN)Image, (UINTN)ImageSize));
*LastAttemptStatus = LAST_ATTEMPT_STATUS_ERROR_INVALID_FORMAT;
if ((Image == NULL) || (ImageSize == 0)) {
@@ -369,82 +377,91 @@ ExtractAuthenticatedImage (
}
ImageAuth = (EFI_FIRMWARE_IMAGE_AUTHENTICATION *)Image;
- if (ImageSize < sizeof(EFI_FIRMWARE_IMAGE_AUTHENTICATION)) {
- DEBUG((DEBUG_ERROR, "ExtractAuthenticatedImage - ImageSize too small\n"));
+ if (ImageSize < sizeof (EFI_FIRMWARE_IMAGE_AUTHENTICATION)) {
+ DEBUG ((DEBUG_ERROR, "ExtractAuthenticatedImage - ImageSize too small\n"));
return FALSE;
}
- if (ImageAuth->AuthInfo.Hdr.dwLength <= OFFSET_OF(WIN_CERTIFICATE_UEFI_GUID, CertData)) {
- DEBUG((DEBUG_ERROR, "ExtractAuthenticatedImage - dwLength too small\n"));
+
+ if (ImageAuth->AuthInfo.Hdr.dwLength <= OFFSET_OF (WIN_CERTIFICATE_UEFI_GUID, CertData)) {
+ DEBUG ((DEBUG_ERROR, "ExtractAuthenticatedImage - dwLength too small\n"));
return FALSE;
}
- if ((UINTN) ImageAuth->AuthInfo.Hdr.dwLength > MAX_UINTN - sizeof(UINT64)) {
- DEBUG((DEBUG_ERROR, "ExtractAuthenticatedImage - dwLength too big\n"));
+
+ if ((UINTN)ImageAuth->AuthInfo.Hdr.dwLength > MAX_UINTN - sizeof (UINT64)) {
+ DEBUG ((DEBUG_ERROR, "ExtractAuthenticatedImage - dwLength too big\n"));
return FALSE;
}
- if (ImageSize <= sizeof(ImageAuth->MonotonicCount) + ImageAuth->AuthInfo.Hdr.dwLength) {
- DEBUG((DEBUG_ERROR, "ExtractAuthenticatedImage - ImageSize too small\n"));
+
+ if (ImageSize <= sizeof (ImageAuth->MonotonicCount) + ImageAuth->AuthInfo.Hdr.dwLength) {
+ DEBUG ((DEBUG_ERROR, "ExtractAuthenticatedImage - ImageSize too small\n"));
return FALSE;
}
+
if (ImageAuth->AuthInfo.Hdr.wRevision != 0x0200) {
- DEBUG((DEBUG_ERROR, "ExtractAuthenticatedImage - wRevision: 0x%02x, expect - 0x%02x\n", (UINTN)ImageAuth->AuthInfo.Hdr.wRevision, (UINTN)0x0200));
+ DEBUG ((DEBUG_ERROR, "ExtractAuthenticatedImage - wRevision: 0x%02x, expect - 0x%02x\n", (UINTN)ImageAuth->AuthInfo.Hdr.wRevision, (UINTN)0x0200));
return FALSE;
}
+
if (ImageAuth->AuthInfo.Hdr.wCertificateType != WIN_CERT_TYPE_EFI_GUID) {
- DEBUG((DEBUG_ERROR, "ExtractAuthenticatedImage - wCertificateType: 0x%02x, expect - 0x%02x\n", (UINTN)ImageAuth->AuthInfo.Hdr.wCertificateType, (UINTN)WIN_CERT_TYPE_EFI_GUID));
+ DEBUG ((DEBUG_ERROR, "ExtractAuthenticatedImage - wCertificateType: 0x%02x, expect - 0x%02x\n", (UINTN)ImageAuth->AuthInfo.Hdr.wCertificateType, (UINTN)WIN_CERT_TYPE_EFI_GUID));
return FALSE;
}
CertType = &ImageAuth->AuthInfo.CertType;
- DEBUG((DEBUG_INFO, "ExtractAuthenticatedImage - CertType: %g\n", CertType));
-
- if (CompareGuid(&gEfiCertPkcs7Guid, CertType)) {
- PublicKeyData = PcdGetPtr(PcdPkcs7CertBuffer);
- PublicKeyDataLength = PcdGetSize(PcdPkcs7CertBuffer);
- } else if (CompareGuid(&gEfiCertTypeRsa2048Sha256Guid, CertType)) {
- PublicKeyData = PcdGetPtr(PcdRsa2048Sha256PublicKeyBuffer);
- PublicKeyDataLength = PcdGetSize(PcdRsa2048Sha256PublicKeyBuffer);
+ DEBUG ((DEBUG_INFO, "ExtractAuthenticatedImage - CertType: %g\n", CertType));
+
+ if (CompareGuid (&gEfiCertPkcs7Guid, CertType)) {
+ PublicKeyData = PcdGetPtr (PcdPkcs7CertBuffer);
+ PublicKeyDataLength = PcdGetSize (PcdPkcs7CertBuffer);
+ } else if (CompareGuid (&gEfiCertTypeRsa2048Sha256Guid, CertType)) {
+ PublicKeyData = PcdGetPtr (PcdRsa2048Sha256PublicKeyBuffer);
+ PublicKeyDataLength = PcdGetSize (PcdRsa2048Sha256PublicKeyBuffer);
} else {
return FALSE;
}
+
ASSERT (PublicKeyData != NULL);
ASSERT (PublicKeyDataLength != 0);
- Status = AuthenticateFmpImage(
+ Status = AuthenticateFmpImage (
ImageAuth,
ImageSize,
PublicKeyData,
PublicKeyDataLength
);
switch (Status) {
- case RETURN_SUCCESS:
- *LastAttemptStatus = LAST_ATTEMPT_STATUS_SUCCESS;
- break;
- case RETURN_SECURITY_VIOLATION:
- *LastAttemptStatus = LAST_ATTEMPT_STATUS_ERROR_AUTH_ERROR;
- break;
- case RETURN_INVALID_PARAMETER:
- *LastAttemptStatus = LAST_ATTEMPT_STATUS_ERROR_INVALID_FORMAT;
- break;
- case RETURN_UNSUPPORTED:
- *LastAttemptStatus = LAST_ATTEMPT_STATUS_ERROR_INVALID_FORMAT;
- break;
- case RETURN_OUT_OF_RESOURCES:
- *LastAttemptStatus = LAST_ATTEMPT_STATUS_ERROR_INSUFFICIENT_RESOURCES;
- break;
- default:
- *LastAttemptStatus = LAST_ATTEMPT_STATUS_ERROR_UNSUCCESSFUL;
- break;
- }
- if (EFI_ERROR(Status)) {
+ case RETURN_SUCCESS:
+ *LastAttemptStatus = LAST_ATTEMPT_STATUS_SUCCESS;
+ break;
+ case RETURN_SECURITY_VIOLATION:
+ *LastAttemptStatus = LAST_ATTEMPT_STATUS_ERROR_AUTH_ERROR;
+ break;
+ case RETURN_INVALID_PARAMETER:
+ *LastAttemptStatus = LAST_ATTEMPT_STATUS_ERROR_INVALID_FORMAT;
+ break;
+ case RETURN_UNSUPPORTED:
+ *LastAttemptStatus = LAST_ATTEMPT_STATUS_ERROR_INVALID_FORMAT;
+ break;
+ case RETURN_OUT_OF_RESOURCES:
+ *LastAttemptStatus = LAST_ATTEMPT_STATUS_ERROR_INSUFFICIENT_RESOURCES;
+ break;
+ default:
+ *LastAttemptStatus = LAST_ATTEMPT_STATUS_ERROR_UNSUCCESSFUL;
+ break;
+ }
+
+ if (EFI_ERROR (Status)) {
return FALSE;
}
if (AuthenticatedImage != NULL) {
- *AuthenticatedImage = (UINT8 *)ImageAuth + ImageAuth->AuthInfo.Hdr.dwLength + sizeof(ImageAuth->MonotonicCount);
+ *AuthenticatedImage = (UINT8 *)ImageAuth + ImageAuth->AuthInfo.Hdr.dwLength + sizeof (ImageAuth->MonotonicCount);
}
+
if (AuthenticatedImageSize != NULL) {
- *AuthenticatedImageSize = ImageSize - ImageAuth->AuthInfo.Hdr.dwLength - sizeof(ImageAuth->MonotonicCount);
+ *AuthenticatedImageSize = ImageSize - ImageAuth->AuthInfo.Hdr.dwLength - sizeof (ImageAuth->MonotonicCount);
}
+
return TRUE;
}
@@ -462,41 +479,45 @@ ExtractAuthenticatedImage (
BOOLEAN
EFIAPI
ExtractSystemFirmwareImageFmpInfo (
- IN VOID *SystemFirmwareImage,
- IN UINTN SystemFirmwareImageSize,
- OUT EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR **ImageFmpInfo,
- OUT UINTN *ImageFmpInfoSize
+ IN VOID *SystemFirmwareImage,
+ IN UINTN SystemFirmwareImageSize,
+ OUT EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR **ImageFmpInfo,
+ OUT UINTN *ImageFmpInfoSize
)
{
- BOOLEAN Result;
- UINT32 SectionHeaderSize;
- UINT32 FileHeaderSize;
+ BOOLEAN Result;
+ UINT32 SectionHeaderSize;
+ UINT32 FileHeaderSize;
- *ImageFmpInfo = NULL;
+ *ImageFmpInfo = NULL;
*ImageFmpInfoSize = 0;
- Result = GetFfsByName(SystemFirmwareImage, SystemFirmwareImageSize, &gEdkiiSystemFirmwareImageDescriptorFileGuid, EFI_FV_FILETYPE_ALL, (VOID **)ImageFmpInfo, ImageFmpInfoSize);
+ Result = GetFfsByName (SystemFirmwareImage, SystemFirmwareImageSize, &gEdkiiSystemFirmwareImageDescriptorFileGuid, EFI_FV_FILETYPE_ALL, (VOID **)ImageFmpInfo, ImageFmpInfoSize);
if (!Result) {
return FALSE;
}
+
if (IS_FFS_FILE2 (*ImageFmpInfo)) {
- FileHeaderSize = sizeof(EFI_FFS_FILE_HEADER2);
+ FileHeaderSize = sizeof (EFI_FFS_FILE_HEADER2);
} else {
- FileHeaderSize = sizeof(EFI_FFS_FILE_HEADER);
+ FileHeaderSize = sizeof (EFI_FFS_FILE_HEADER);
}
- *ImageFmpInfo = (VOID *)((UINT8 *)*ImageFmpInfo + FileHeaderSize);
+
+ *ImageFmpInfo = (VOID *)((UINT8 *)*ImageFmpInfo + FileHeaderSize);
*ImageFmpInfoSize = *ImageFmpInfoSize - FileHeaderSize;
- Result = GetSectionByType(*ImageFmpInfo, (UINT32)*ImageFmpInfoSize, EFI_SECTION_RAW, 0, (VOID **)ImageFmpInfo, ImageFmpInfoSize);
+ Result = GetSectionByType (*ImageFmpInfo, (UINT32)*ImageFmpInfoSize, EFI_SECTION_RAW, 0, (VOID **)ImageFmpInfo, ImageFmpInfoSize);
if (!Result) {
return FALSE;
}
- if (IS_SECTION2(*ImageFmpInfo)) {
- SectionHeaderSize = sizeof(EFI_RAW_SECTION2);
+
+ if (IS_SECTION2 (*ImageFmpInfo)) {
+ SectionHeaderSize = sizeof (EFI_RAW_SECTION2);
} else {
- SectionHeaderSize = sizeof(EFI_RAW_SECTION);
+ SectionHeaderSize = sizeof (EFI_RAW_SECTION);
}
- *ImageFmpInfo = (VOID *)((UINT8 *)*ImageFmpInfo + SectionHeaderSize);
+
+ *ImageFmpInfo = (VOID *)((UINT8 *)*ImageFmpInfo + SectionHeaderSize);
*ImageFmpInfoSize = *ImageFmpInfoSize - SectionHeaderSize;
return TRUE;
@@ -516,32 +537,34 @@ ExtractSystemFirmwareImageFmpInfo (
BOOLEAN
EFIAPI
ExtractSystemFirmwareImage (
- IN VOID *AuthenticatedImage,
- IN UINTN AuthenticatedImageSize,
- OUT VOID **SystemFirmwareImage,
- OUT UINTN *SystemFirmwareImageSize
+ IN VOID *AuthenticatedImage,
+ IN UINTN AuthenticatedImageSize,
+ OUT VOID **SystemFirmwareImage,
+ OUT UINTN *SystemFirmwareImageSize
)
{
- BOOLEAN Result;
- UINT32 FileHeaderSize;
+ BOOLEAN Result;
+ UINT32 FileHeaderSize;
- *SystemFirmwareImage = NULL;
+ *SystemFirmwareImage = NULL;
*SystemFirmwareImageSize = 0;
- Result = GetFfsByName(AuthenticatedImage, AuthenticatedImageSize, &mEdkiiSystemFirmwareFileGuid, EFI_FV_FILETYPE_RAW, SystemFirmwareImage, SystemFirmwareImageSize);
+ Result = GetFfsByName (AuthenticatedImage, AuthenticatedImageSize, &mEdkiiSystemFirmwareFileGuid, EFI_FV_FILETYPE_RAW, SystemFirmwareImage, SystemFirmwareImageSize);
if (!Result) {
// no nested FV, just return all data.
- *SystemFirmwareImage = AuthenticatedImage;
+ *SystemFirmwareImage = AuthenticatedImage;
*SystemFirmwareImageSize = AuthenticatedImageSize;
return TRUE;
}
+
if (IS_FFS_FILE2 (*SystemFirmwareImage)) {
- FileHeaderSize = sizeof(EFI_FFS_FILE_HEADER2);
+ FileHeaderSize = sizeof (EFI_FFS_FILE_HEADER2);
} else {
- FileHeaderSize = sizeof(EFI_FFS_FILE_HEADER);
+ FileHeaderSize = sizeof (EFI_FFS_FILE_HEADER);
}
- *SystemFirmwareImage = (UINT8 *)*SystemFirmwareImage + FileHeaderSize;
+
+ *SystemFirmwareImage = (UINT8 *)*SystemFirmwareImage + FileHeaderSize;
*SystemFirmwareImageSize = *SystemFirmwareImageSize - FileHeaderSize;
return Result;
@@ -568,22 +591,22 @@ ExtractSystemFirmwareImage (
EFI_STATUS
EFIAPI
CapsuleAuthenticateSystemFirmware (
- IN VOID *Image,
- IN UINTN ImageSize,
- IN BOOLEAN ForceVersionMatch,
- OUT UINT32 *LastAttemptVersion,
- OUT UINT32 *LastAttemptStatus,
- OUT VOID **AuthenticatedImage,
- OUT UINTN *AuthenticatedImageSize
+ IN VOID *Image,
+ IN UINTN ImageSize,
+ IN BOOLEAN ForceVersionMatch,
+ OUT UINT32 *LastAttemptVersion,
+ OUT UINT32 *LastAttemptStatus,
+ OUT VOID **AuthenticatedImage,
+ OUT UINTN *AuthenticatedImageSize
)
{
- BOOLEAN Result;
- EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR *ImageFmpInfo;
- UINTN ImageFmpInfoSize;
- EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR *CurrentImageFmpInfo;
- UINTN CurrentImageFmpInfoSize;
- VOID *SystemFirmwareImage;
- UINTN SystemFirmwareImageSize;
+ BOOLEAN Result;
+ EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR *ImageFmpInfo;
+ UINTN ImageFmpInfoSize;
+ EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR *CurrentImageFmpInfo;
+ UINTN CurrentImageFmpInfoSize;
+ VOID *SystemFirmwareImage;
+ UINTN SystemFirmwareImageSize;
*LastAttemptVersion = 0;
@@ -592,55 +615,56 @@ CapsuleAuthenticateSystemFirmware (
// Do not touch FMP protocol and its private structure.
//
if (mImageFmpInfo == NULL) {
- DEBUG((DEBUG_INFO, "ImageFmpInfo is not set\n"));
+ DEBUG ((DEBUG_INFO, "ImageFmpInfo is not set\n"));
return EFI_SECURITY_VIOLATION;
}
- Result = ExtractAuthenticatedImage((VOID *)Image, ImageSize, LastAttemptStatus, AuthenticatedImage, AuthenticatedImageSize);
+ Result = ExtractAuthenticatedImage ((VOID *)Image, ImageSize, LastAttemptStatus, AuthenticatedImage, AuthenticatedImageSize);
if (!Result) {
- DEBUG((DEBUG_INFO, "ExtractAuthenticatedImage - fail\n"));
+ DEBUG ((DEBUG_INFO, "ExtractAuthenticatedImage - fail\n"));
return EFI_SECURITY_VIOLATION;
}
- DEBUG((DEBUG_INFO, "AuthenticatedImage - 0x%x - 0x%x\n", *AuthenticatedImage, *AuthenticatedImageSize));
+ DEBUG ((DEBUG_INFO, "AuthenticatedImage - 0x%x - 0x%x\n", *AuthenticatedImage, *AuthenticatedImageSize));
- Result = ExtractSystemFirmwareImage(*AuthenticatedImage, *AuthenticatedImageSize, &SystemFirmwareImage, &SystemFirmwareImageSize);
+ Result = ExtractSystemFirmwareImage (*AuthenticatedImage, *AuthenticatedImageSize, &SystemFirmwareImage, &SystemFirmwareImageSize);
if (!Result) {
*LastAttemptStatus = LAST_ATTEMPT_STATUS_ERROR_INVALID_FORMAT;
- DEBUG((DEBUG_INFO, "ExtractSystemFirmwareImage - fail\n"));
+ DEBUG ((DEBUG_INFO, "ExtractSystemFirmwareImage - fail\n"));
return EFI_SECURITY_VIOLATION;
}
- DEBUG((DEBUG_INFO, "SystemFirmwareImage - 0x%x - 0x%x\n", SystemFirmwareImage, SystemFirmwareImageSize));
- Result = ExtractSystemFirmwareImageFmpInfo(SystemFirmwareImage, SystemFirmwareImageSize, &ImageFmpInfo, &ImageFmpInfoSize);
+ DEBUG ((DEBUG_INFO, "SystemFirmwareImage - 0x%x - 0x%x\n", SystemFirmwareImage, SystemFirmwareImageSize));
+
+ Result = ExtractSystemFirmwareImageFmpInfo (SystemFirmwareImage, SystemFirmwareImageSize, &ImageFmpInfo, &ImageFmpInfoSize);
if (!Result) {
*LastAttemptStatus = LAST_ATTEMPT_STATUS_ERROR_INVALID_FORMAT;
- DEBUG((DEBUG_INFO, "ExtractSystemFirmwareImageFmpInfo - fail\n"));
+ DEBUG ((DEBUG_INFO, "ExtractSystemFirmwareImageFmpInfo - fail\n"));
return EFI_SECURITY_VIOLATION;
}
*LastAttemptVersion = ImageFmpInfo->Version;
- DEBUG((DEBUG_INFO, "ImageFmpInfo - 0x%x - 0x%x\n", ImageFmpInfo, ImageFmpInfoSize));
- DEBUG((DEBUG_INFO, "NewImage Version - 0x%x\n", ImageFmpInfo->Version));
- DEBUG((DEBUG_INFO, "NewImage LowestSupportedImageVersion - 0x%x\n", ImageFmpInfo->LowestSupportedImageVersion));
+ DEBUG ((DEBUG_INFO, "ImageFmpInfo - 0x%x - 0x%x\n", ImageFmpInfo, ImageFmpInfoSize));
+ DEBUG ((DEBUG_INFO, "NewImage Version - 0x%x\n", ImageFmpInfo->Version));
+ DEBUG ((DEBUG_INFO, "NewImage LowestSupportedImageVersion - 0x%x\n", ImageFmpInfo->LowestSupportedImageVersion));
- CurrentImageFmpInfo = mImageFmpInfo;
+ CurrentImageFmpInfo = mImageFmpInfo;
CurrentImageFmpInfoSize = mImageFmpInfoSize;
- DEBUG((DEBUG_INFO, "ImageFmpInfo - 0x%x - 0x%x\n", CurrentImageFmpInfo, CurrentImageFmpInfoSize));
- DEBUG((DEBUG_INFO, "Current Version - 0x%x\n", CurrentImageFmpInfo->Version));
- DEBUG((DEBUG_INFO, "Current LowestSupportedImageVersion - 0x%x\n", CurrentImageFmpInfo->LowestSupportedImageVersion));
+ DEBUG ((DEBUG_INFO, "ImageFmpInfo - 0x%x - 0x%x\n", CurrentImageFmpInfo, CurrentImageFmpInfoSize));
+ DEBUG ((DEBUG_INFO, "Current Version - 0x%x\n", CurrentImageFmpInfo->Version));
+ DEBUG ((DEBUG_INFO, "Current LowestSupportedImageVersion - 0x%x\n", CurrentImageFmpInfo->LowestSupportedImageVersion));
if (ForceVersionMatch) {
if (CurrentImageFmpInfo->Version != ImageFmpInfo->Version) {
*LastAttemptStatus = LAST_ATTEMPT_STATUS_ERROR_INCORRECT_VERSION;
- DEBUG((DEBUG_INFO, "ForceVersionMatch check - fail\n"));
+ DEBUG ((DEBUG_INFO, "ForceVersionMatch check - fail\n"));
return EFI_SECURITY_VIOLATION;
}
} else {
if (ImageFmpInfo->Version < CurrentImageFmpInfo->LowestSupportedImageVersion) {
*LastAttemptStatus = LAST_ATTEMPT_STATUS_ERROR_INCORRECT_VERSION;
- DEBUG((DEBUG_INFO, "LowestSupportedImageVersion check - fail\n"));
+ DEBUG ((DEBUG_INFO, "LowestSupportedImageVersion check - fail\n"));
return EFI_SECURITY_VIOLATION;
}
}
@@ -661,17 +685,18 @@ CapsuleAuthenticateSystemFirmware (
VOID
EFIAPI
EdkiiSystemCapsuleLibPcdCallBack (
- IN CONST GUID *CallBackGuid OPTIONAL,
- IN UINTN CallBackToken,
- IN OUT VOID *TokenData,
- IN UINTN TokenDataSize
+ IN CONST GUID *CallBackGuid OPTIONAL,
+ IN UINTN CallBackToken,
+ IN OUT VOID *TokenData,
+ IN UINTN TokenDataSize
)
{
if (CompareGuid (CallBackGuid, &gEfiSignedCapsulePkgTokenSpaceGuid) &&
- CallBackToken == PcdToken (PcdEdkiiSystemFirmwareImageDescriptor)) {
+ (CallBackToken == PcdToken (PcdEdkiiSystemFirmwareImageDescriptor)))
+ {
mImageFmpInfoSize = TokenDataSize;
- mImageFmpInfo = AllocateCopyPool (mImageFmpInfoSize, TokenData);
- ASSERT(mImageFmpInfo != NULL);
+ mImageFmpInfo = AllocateCopyPool (mImageFmpInfoSize, TokenData);
+ ASSERT (mImageFmpInfo != NULL);
//
// Cancel Callback after get the real set value
//
@@ -683,8 +708,9 @@ EdkiiSystemCapsuleLibPcdCallBack (
}
if (CompareGuid (CallBackGuid, &gEfiSignedCapsulePkgTokenSpaceGuid) &&
- CallBackToken == PcdToken (PcdEdkiiSystemFirmwareFileGuid)) {
- CopyGuid(&mEdkiiSystemFirmwareFileGuid, TokenData);
+ (CallBackToken == PcdToken (PcdEdkiiSystemFirmwareFileGuid)))
+ {
+ CopyGuid (&mEdkiiSystemFirmwareFileGuid, TokenData);
//
// Cancel Callback after get the real set value
//
@@ -707,13 +733,14 @@ EdkiiSystemCapsuleLibConstructor (
VOID
)
{
- mImageFmpInfoSize = PcdGetSize(PcdEdkiiSystemFirmwareImageDescriptor);
- mImageFmpInfo = PcdGetPtr(PcdEdkiiSystemFirmwareImageDescriptor);
+ mImageFmpInfoSize = PcdGetSize (PcdEdkiiSystemFirmwareImageDescriptor);
+ mImageFmpInfo = PcdGetPtr (PcdEdkiiSystemFirmwareImageDescriptor);
//
// Verify Firmware Image Descriptor first
//
- if (mImageFmpInfoSize < sizeof (EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR) ||
- mImageFmpInfo->Signature != EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR_SIGNATURE) {
+ if ((mImageFmpInfoSize < sizeof (EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR)) ||
+ (mImageFmpInfo->Signature != EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR_SIGNATURE))
+ {
//
// SystemFirmwareImageDescriptor is not set.
// Register PCD set callback to hook PCD value set.
@@ -727,10 +754,10 @@ EdkiiSystemCapsuleLibConstructor (
);
} else {
mImageFmpInfo = AllocateCopyPool (mImageFmpInfoSize, mImageFmpInfo);
- ASSERT(mImageFmpInfo != NULL);
+ ASSERT (mImageFmpInfo != NULL);
}
- CopyGuid(&mEdkiiSystemFirmwareFileGuid, PcdGetPtr(PcdEdkiiSystemFirmwareFileGuid));
+ CopyGuid (&mEdkiiSystemFirmwareFileGuid, PcdGetPtr (PcdEdkiiSystemFirmwareFileGuid));
//
// Verify GUID value first
//
@@ -741,5 +768,6 @@ EdkiiSystemCapsuleLibConstructor (
EdkiiSystemCapsuleLibPcdCallBack
);
}
+
return EFI_SUCCESS;
}