\r
FmpSetImage() will receive untrusted input and do basic validation.\r
\r
- Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>\r
- This program and the accompanying materials\r
- are licensed and made available under the terms and conditions of the BSD License\r
- which accompanies this distribution. The full text of the license may be found at\r
- http://opensource.org/licenses/bsd-license.php\r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+ Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>\r
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
//\r
// SystemFmp driver private data\r
//\r
-SYSTEM_FMP_PRIVATE_DATA *mSystemFmpPrivate = NULL;\r
+SYSTEM_FMP_PRIVATE_DATA *mSystemFmpPrivate = NULL;\r
\r
/**\r
Dispatch system FMP images.\r
@param[out] LastAttemptVersion The last attempt version, which will be recorded in ESRT and FMP EFI_FIRMWARE_IMAGE_DESCRIPTOR.\r
@param[out] LastAttemptStatus The last attempt status, which will be recorded in ESRT and FMP EFI_FIRMWARE_IMAGE_DESCRIPTOR.\r
\r
- @retval EFI_SUCESS Process Capsule Image successfully.\r
+ @retval EFI_SUCCESS Process Capsule Image successfully.\r
@retval EFI_UNSUPPORTED Capsule image is not supported by the firmware.\r
@retval EFI_VOLUME_CORRUPTED FV volume in the capsule is corrupted.\r
@retval EFI_OUT_OF_RESOURCES Not enough memory.\r
**/\r
EFI_STATUS\r
DispatchSystemFmpImages (\r
- IN VOID *Image,\r
- IN UINTN ImageSize,\r
- OUT UINT32 *LastAttemptVersion,\r
- OUT UINT32 *LastAttemptStatus\r
+ IN VOID *Image,\r
+ IN UINTN ImageSize,\r
+ OUT UINT32 *LastAttemptVersion,\r
+ OUT UINT32 *LastAttemptStatus\r
)\r
{\r
- EFI_STATUS Status;\r
- VOID *AuthenticatedImage;\r
- UINTN AuthenticatedImageSize;\r
- VOID *DispatchFvImage;\r
- UINTN DispatchFvImageSize;\r
- EFI_HANDLE FvProtocolHandle;\r
- EFI_FIRMWARE_VOLUME_HEADER *FvImage;\r
- BOOLEAN Result;\r
+ EFI_STATUS Status;\r
+ VOID *AuthenticatedImage;\r
+ UINTN AuthenticatedImageSize;\r
+ VOID *DispatchFvImage;\r
+ UINTN DispatchFvImageSize;\r
+ EFI_HANDLE FvProtocolHandle;\r
+ EFI_FIRMWARE_VOLUME_HEADER *FvImage;\r
+ BOOLEAN Result;\r
+\r
+ AuthenticatedImage = NULL;\r
+ AuthenticatedImageSize = 0;\r
\r
- DEBUG((DEBUG_INFO, "DispatchSystemFmpImages\n"));\r
+ DEBUG ((DEBUG_INFO, "DispatchSystemFmpImages\n"));\r
\r
//\r
// Verify\r
//\r
- Status = CapsuleAuthenticateSystemFirmware(Image, ImageSize, FALSE, LastAttemptVersion, LastAttemptStatus, &AuthenticatedImage, &AuthenticatedImageSize);\r
- if (EFI_ERROR(Status)) {\r
- DEBUG((DEBUG_INFO, "SystemFirmwareAuthenticateImage - %r\n", Status));\r
+ Status = CapsuleAuthenticateSystemFirmware (Image, ImageSize, FALSE, LastAttemptVersion, LastAttemptStatus, &AuthenticatedImage, &AuthenticatedImageSize);\r
+ if (EFI_ERROR (Status)) {\r
+ DEBUG ((DEBUG_INFO, "SystemFirmwareAuthenticateImage - %r\n", Status));\r
return Status;\r
}\r
\r
//\r
// Get FV\r
//\r
- Result = ExtractDriverFvImage(AuthenticatedImage, AuthenticatedImageSize, &DispatchFvImage, &DispatchFvImageSize);\r
+ Result = ExtractDriverFvImage (AuthenticatedImage, AuthenticatedImageSize, &DispatchFvImage, &DispatchFvImageSize);\r
if (Result) {\r
- DEBUG((DEBUG_INFO, "ExtractDriverFvImage\n"));\r
+ DEBUG ((DEBUG_INFO, "ExtractDriverFvImage\n"));\r
//\r
// Dispatch\r
//\r
if (((EFI_FIRMWARE_VOLUME_HEADER *)DispatchFvImage)->FvLength == DispatchFvImageSize) {\r
- FvImage = AllocatePages(EFI_SIZE_TO_PAGES(DispatchFvImageSize));\r
+ FvImage = AllocatePages (EFI_SIZE_TO_PAGES (DispatchFvImageSize));\r
if (FvImage != NULL) {\r
- CopyMem(FvImage, DispatchFvImage, DispatchFvImageSize);\r
- Status = gDS->ProcessFirmwareVolume(\r
+ CopyMem (FvImage, DispatchFvImage, DispatchFvImageSize);\r
+ Status = gDS->ProcessFirmwareVolume (\r
(VOID *)FvImage,\r
(UINTN)FvImage->FvLength,\r
&FvProtocolHandle\r
);\r
- DEBUG((DEBUG_INFO, "ProcessFirmwareVolume - %r\n", Status));\r
- if (!EFI_ERROR(Status)) {\r
- gDS->Dispatch();\r
- DEBUG((DEBUG_INFO, "Dispatch Done\n"));\r
+ DEBUG ((DEBUG_INFO, "ProcessFirmwareVolume - %r\n", Status));\r
+ if (!EFI_ERROR (Status)) {\r
+ gDS->Dispatch ();\r
+ DEBUG ((DEBUG_INFO, "Dispatch Done\n"));\r
}\r
}\r
}\r
@retval EFI_ABORTED The operation is aborted.\r
@retval EFI_INVALID_PARAMETER The Image was NULL.\r
@retval EFI_UNSUPPORTED The operation is not supported.\r
- @retval EFI_SECURITY_VIOLATIO The operation could not be performed due to an authentication failure.\r
+ @retval EFI_SECURITY_VIOLATION The operation could not be performed due to an authentication failure.\r
\r
**/\r
EFI_STATUS\r
EFIAPI\r
FmpSetImage (\r
- IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL *This,\r
- IN UINT8 ImageIndex,\r
- IN CONST VOID *Image,\r
- IN UINTN ImageSize,\r
- IN CONST VOID *VendorCode,\r
- IN EFI_FIRMWARE_MANAGEMENT_UPDATE_IMAGE_PROGRESS Progress,\r
- OUT CHAR16 **AbortReason\r
+ IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL *This,\r
+ IN UINT8 ImageIndex,\r
+ IN CONST VOID *Image,\r
+ IN UINTN ImageSize,\r
+ IN CONST VOID *VendorCode,\r
+ IN EFI_FIRMWARE_MANAGEMENT_UPDATE_IMAGE_PROGRESS Progress,\r
+ OUT CHAR16 **AbortReason\r
)\r
{\r
- SYSTEM_FMP_PRIVATE_DATA *SystemFmpPrivate;\r
- EFI_FIRMWARE_MANAGEMENT_PROTOCOL *SystemFmp;\r
- EFI_STATUS Status;\r
- EFI_STATUS VarStatus;\r
+ SYSTEM_FMP_PRIVATE_DATA *SystemFmpPrivate;\r
+ EFI_FIRMWARE_MANAGEMENT_PROTOCOL *SystemFmp;\r
+ EFI_STATUS Status;\r
+ EFI_STATUS VarStatus;\r
\r
- if (Image == NULL || ImageSize == 0 || AbortReason == NULL) {\r
+ if ((Image == NULL) || (ImageSize == 0) || (AbortReason == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
- SystemFmpPrivate = SYSTEM_FMP_PRIVATE_DATA_FROM_FMP(This);\r
+ SystemFmpPrivate = SYSTEM_FMP_PRIVATE_DATA_FROM_FMP (This);\r
*AbortReason = NULL;\r
\r
- if (ImageIndex == 0 || ImageIndex > SystemFmpPrivate->DescriptorCount) {\r
+ if ((ImageIndex == 0) || (ImageIndex > SystemFmpPrivate->DescriptorCount)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
//\r
// Process FV\r
//\r
- Status = DispatchSystemFmpImages((VOID *)Image, ImageSize, &SystemFmpPrivate->LastAttempt.LastAttemptVersion, &SystemFmpPrivate->LastAttempt.LastAttemptStatus);\r
- DEBUG((DEBUG_INFO, "(Agent)SetImage - LastAttemp Version - 0x%x, State - 0x%x\n", SystemFmpPrivate->LastAttempt.LastAttemptVersion, SystemFmpPrivate->LastAttempt.LastAttemptStatus));\r
- if (EFI_ERROR(Status)) {\r
- VarStatus = gRT->SetVariable(\r
+ Status = DispatchSystemFmpImages ((VOID *)Image, ImageSize, &SystemFmpPrivate->LastAttempt.LastAttemptVersion, &SystemFmpPrivate->LastAttempt.LastAttemptStatus);\r
+ DEBUG ((DEBUG_INFO, "(Agent)SetImage - LastAttempt Version - 0x%x, State - 0x%x\n", SystemFmpPrivate->LastAttempt.LastAttemptVersion, SystemFmpPrivate->LastAttempt.LastAttemptStatus));\r
+ if (EFI_ERROR (Status)) {\r
+ VarStatus = gRT->SetVariable (\r
SYSTEM_FMP_LAST_ATTEMPT_VARIABLE_NAME,\r
&gSystemFmpLastAttemptVariableGuid,\r
EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
- sizeof(SystemFmpPrivate->LastAttempt),\r
+ sizeof (SystemFmpPrivate->LastAttempt),\r
&SystemFmpPrivate->LastAttempt\r
);\r
- DEBUG((DEBUG_INFO, "(Agent)SetLastAttemp - %r\n", VarStatus));\r
+ DEBUG ((DEBUG_INFO, "(Agent)SetLastAttempt - %r\n", VarStatus));\r
return Status;\r
}\r
\r
//\r
- // Pass Thru\r
+ // Pass Thru to System FMP Protocol on same handle as FMP Protocol\r
//\r
- Status = gBS->LocateProtocol(&gSystemFmpProtocolGuid, NULL, (VOID **)&SystemFmp);\r
- if (EFI_ERROR(Status)) {\r
- DEBUG((DEBUG_INFO, "(Agent)SetImage - SystemFmpProtocol - %r\n", Status));\r
- SystemFmpPrivate->LastAttempt.LastAttemptStatus = LAST_ATTEMPT_STATUS_ERROR_INVALID_FORMAT;\r
- VarStatus = gRT->SetVariable(\r
- SYSTEM_FMP_LAST_ATTEMPT_VARIABLE_NAME,\r
- &gSystemFmpLastAttemptVariableGuid,\r
- EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
- sizeof(SystemFmpPrivate->LastAttempt),\r
- &SystemFmpPrivate->LastAttempt\r
- );\r
- DEBUG((DEBUG_INFO, "(Agent)SetLastAttemp - %r\n", VarStatus));\r
- return Status;\r
+ Status = gBS->HandleProtocol (\r
+ SystemFmpPrivate->Handle,\r
+ &gSystemFmpProtocolGuid,\r
+ (VOID **)&SystemFmp\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ Status = gBS->LocateProtocol (\r
+ &gSystemFmpProtocolGuid,\r
+ NULL,\r
+ (VOID **)&SystemFmp\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ DEBUG ((DEBUG_INFO, "(Agent)SetImage - SystemFmpProtocol - %r\n", Status));\r
+ SystemFmpPrivate->LastAttempt.LastAttemptStatus = LAST_ATTEMPT_STATUS_ERROR_INVALID_FORMAT;\r
+ VarStatus = gRT->SetVariable (\r
+ SYSTEM_FMP_LAST_ATTEMPT_VARIABLE_NAME,\r
+ &gSystemFmpLastAttemptVariableGuid,\r
+ EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
+ sizeof (SystemFmpPrivate->LastAttempt),\r
+ &SystemFmpPrivate->LastAttempt\r
+ );\r
+ DEBUG ((DEBUG_INFO, "(Agent)SetLastAttempt - %r\n", VarStatus));\r
+ return Status;\r
+ }\r
}\r
\r
- return SystemFmp->SetImage(SystemFmp, ImageIndex, Image, ImageSize, VendorCode, Progress, AbortReason);\r
+ return SystemFmp->SetImage (SystemFmp, ImageIndex, Image, ImageSize, VendorCode, Progress, AbortReason);\r
}\r
\r
/**\r
EFI_STATUS\r
EFIAPI\r
SystemFirmwareReportMainDxe (\r
- IN EFI_HANDLE ImageHandle,\r
- IN EFI_SYSTEM_TABLE *SystemTable\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_SYSTEM_TABLE *SystemTable\r
)\r
{\r
- EFI_STATUS Status;\r
+ EFI_STATUS Status;\r
\r
//\r
// Initialize SystemFmpPrivateData\r
//\r
- mSystemFmpPrivate = AllocateZeroPool (sizeof(SYSTEM_FMP_PRIVATE_DATA));\r
+ mSystemFmpPrivate = AllocateZeroPool (sizeof (SYSTEM_FMP_PRIVATE_DATA));\r
if (mSystemFmpPrivate == NULL) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
\r
- Status = InitializePrivateData(mSystemFmpPrivate);\r
- if (EFI_ERROR(Status)) {\r
- FreePool(mSystemFmpPrivate);\r
+ Status = InitializePrivateData (mSystemFmpPrivate);\r
+ if (EFI_ERROR (Status)) {\r
+ FreePool (mSystemFmpPrivate);\r
mSystemFmpPrivate = NULL;\r
return Status;\r
}\r
&mSystemFmpPrivate->Fmp\r
);\r
if (EFI_ERROR (Status)) {\r
- FreePool(mSystemFmpPrivate);\r
+ FreePool (mSystemFmpPrivate);\r
mSystemFmpPrivate = NULL;\r
return Status;\r
}\r