1.For EFI_FIRMWARE_MANAGEMENT_PROTOCOL.GetImage(): Add the following sentence at the end of the Image parameter description. "May be NULL with a zero ImageSize in order to determine the size of the buffer needed".
Modify the description of "EFI_INVALID_PARAMETER" return code as "The ImageSize is not too small and Image is NULL." 2.For EFI_FIRMWARE_MANAGEMENT_PROTOCOL.GetImageInfo(): Add the following sentence at the end of the ImageInfo parameter description."May be NULL with a zero ImageInfoSize in order to determine the size of the buffer needed". Modify the description of "EFI_INVALID_PARAMETER" return code as "The ImageInfoSize is not too small and Image is NULL." and add new descriptions for "EFI_INVALID_PARAMETER" return code. REF: UEFI spec v2.10 23.1.2 REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4660 Cc: Michael D Kinney <michael.d.kin...@intel.com> Cc: Liming Gao <gaolim...@byosoft.com.cn> Cc: Zhiguang Liu <zhiguang....@intel.com> Cc: Yi Li <yi1...@intel.com> Cc: GuoX Xu <guox...@intel.com> Signed-off-by: Pethaiyan Madhan <madhan.pethai...@intel.com> --- FmpDevicePkg/FmpDxe/FmpDxe.c | 52 +++++++++++++++++++++--------------- FmpDevicePkg/FmpDxe/FmpDxe.h | 15 ++++++++--- 2 files changed, 43 insertions(+), 24 deletions(-) diff --git a/FmpDevicePkg/FmpDxe/FmpDxe.c b/FmpDevicePkg/FmpDxe/FmpDxe.c index 1e7ec4a09e..4111b7cb8e 100644 --- a/FmpDevicePkg/FmpDxe/FmpDxe.c +++ b/FmpDevicePkg/FmpDxe/FmpDxe.c @@ -43,20 +43,20 @@ const FIRMWARE_MANAGEMENT_PRIVATE_DATA mFirmwareManagementPrivateDataTemplate = FIRMWARE_MANAGEMENT_PRIVATE_DATA_SIGNATURE, // Signature NULL, // Handle { // Fmp - GetTheImageInfo, + GetImageInfo, GetTheImage, SetTheImage, CheckTheImage, GetPackageInfo, SetPackageInfo }, - FALSE, // DescriptorPopulated - { // Desc - 1, // ImageIndex + FALSE, // DescriptorPopulated + { // Desc + 1, // ImageIndex // // ImageTypeId // - { 0x00000000, 0x0000,0x0000, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } + { 0x00000000, 0x0000,0x0000, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, 1, // ImageId NULL, // ImageIdName @@ -71,18 +71,18 @@ const FIRMWARE_MANAGEMENT_PRIVATE_DATA mFirmwareManagementPrivateDataTemplate = 0, // LastAttemptStatus 0 // HardwareInstance }, - NULL, // ImageIdName - NULL, // VersionName - TRUE, // RuntimeVersionSupported - NULL, // FmpDeviceLockEvent - FALSE, // FmpDeviceLocked - NULL, // FmpDeviceContext - NULL, // VersionVariableName - NULL, // LsvVariableName - NULL, // LastAttemptStatusVariableName - NULL, // LastAttemptVersionVariableName - NULL, // FmpStateVariableName - TRUE // DependenciesSatisfied + NULL, // ImageIdName + NULL, // VersionName + TRUE, // RuntimeVersionSupported + NULL, // FmpDeviceLockEvent + FALSE, // FmpDeviceLocked + NULL, // FmpDeviceContext + NULL, // VersionVariableName + NULL, // LsvVariableName + NULL, // LastAttemptStatusVariableName + NULL, // LastAttemptVersionVariableName + NULL, // FmpStateVariableName + TRUE // DependenciesSatisfied }; /// @@ -417,6 +417,8 @@ PopulateDescriptor ( to contain the image(s) information if the buffer was too small. @param[in, out] ImageInfo A pointer to the buffer in which firmware places the current image(s) information. The information is an array of EFI_FIRMWARE_IMAGE_DESCRIPTORs. + May be NULL with a zero ImageInfoSize in order to determine the size of the + buffer needed. @param[out] DescriptorVersion A pointer to the location in which firmware returns the version number associated with the EFI_FIRMWARE_IMAGE_DESCRIPTOR. @param[out] DescriptorCount A pointer to the location in which firmware returns the number of @@ -437,13 +439,18 @@ PopulateDescriptor ( @retval EFI_SUCCESS The device was successfully updated with the new image. @retval EFI_BUFFER_TOO_SMALL The ImageInfo buffer was too small. The current buffer size needed to hold the image(s) information is returned in ImageInfoSize. - @retval EFI_INVALID_PARAMETER ImageInfoSize is NULL. + @retval EFI_INVALID_PARAMETER ImageInfoSize is not too small and ImageInfo is NULL. + @retval EFI_INVALID_PARAMETER ImageInfoSize is non-zero and DescriptorVersion is NULL. + @retval EFI_INVALID_PARAMETER ImageInfoSize is non-zero and DescriptorCount is NULL. + @retval EFI_INVALID_PARAMETER ImageInfoSize is non-zero and DescriptorSize is NULL. + @retval EFI_INVALID_PARAMETER ImageInfoSize is non-zero and PackageVersion is NULL. + @retval EFI_INVALID_PARAMETER ImageInfoSize is non-zero and PackageVersionName is NULL. @retval EFI_DEVICE_ERROR Valid information could not be returned. Possible corrupted image. **/ EFI_STATUS EFIAPI -GetTheImageInfo ( +GetImageInfo ( IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL *This, IN OUT UINTN *ImageInfoSize, IN OUT EFI_FIRMWARE_IMAGE_DESCRIPTOR *ImageInfo, @@ -495,7 +502,7 @@ GetTheImageInfo ( // Confirm that buffer isn't null // if ( (ImageInfo == NULL) || (DescriptorVersion == NULL) || (DescriptorCount == NULL) || (DescriptorSize == NULL) - || (PackageVersion == NULL)) + || (PackageVersion == NULL) || (PackageVersionName == NULL)) { DEBUG ((DEBUG_ERROR, "FmpDxe(%s): GetImageInfo() - Pointer Parameter is NULL.\n", mImageIdName)); Status = EFI_INVALID_PARAMETER; @@ -544,6 +551,9 @@ cleanup: @param[in] ImageIndex A unique number identifying the firmware image(s) within the device. The number is between 1 and DescriptorCount. @param[in, out] Image Points to the buffer where the current image is copied to. + May be NULL with a zero ImageSize in order to determine the size of the + buffer needed. + @param[in, out] ImageSize On entry, points to the size of the buffer pointed to by Image, in bytes. On return, points to the length of the image, in bytes. @@ -551,7 +561,7 @@ cleanup: @retval EFI_BUFFER_TOO_SMALL The buffer specified by ImageSize is too small to hold the image. The current buffer size needed to hold the image is returned in ImageSize. - @retval EFI_INVALID_PARAMETER The Image was NULL. + @retval EFI_INVALID_PARAMETER The ImageSize is not too small and Image is NULL @retval EFI_NOT_FOUND The current image is not copied to the buffer. @retval EFI_UNSUPPORTED The operation is not supported. @retval EFI_SECURITY_VIOLATION The operation could not be performed due to an authentication failure. diff --git a/FmpDevicePkg/FmpDxe/FmpDxe.h b/FmpDevicePkg/FmpDxe/FmpDxe.h index 7baf730e69..d2ade143bd 100644 --- a/FmpDevicePkg/FmpDxe/FmpDxe.h +++ b/FmpDevicePkg/FmpDxe/FmpDxe.h @@ -114,6 +114,8 @@ DetectTestKey ( to contain the image(s) information if the buffer was too small. @param[in, out] ImageInfo A pointer to the buffer in which firmware places the current image(s) information. The information is an array of EFI_FIRMWARE_IMAGE_DESCRIPTORs. + May be NULL with a zero ImageInfoSize in order to determine the size of the + buffer needed. @param[out] DescriptorVersion A pointer to the location in which firmware returns the version number associated with the EFI_FIRMWARE_IMAGE_DESCRIPTOR. @param[out] DescriptorCount A pointer to the location in which firmware returns the number of @@ -134,13 +136,18 @@ DetectTestKey ( @retval EFI_SUCCESS The device was successfully updated with the new image. @retval EFI_BUFFER_TOO_SMALL The ImageInfo buffer was too small. The current buffer size needed to hold the image(s) information is returned in ImageInfoSize. - @retval EFI_INVALID_PARAMETER ImageInfoSize is NULL. + @retval EFI_INVALID_PARAMETER ImageInfoSize is not too small and ImageInfo is NULL. + @retval EFI_INVALID_PARAMETER ImageInfoSize is non-zero and DescriptorVersion is NULL. + @retval EFI_INVALID_PARAMETER ImageInfoSize is non-zero and DescriptorCount is NULL. + @retval EFI_INVALID_PARAMETER ImageInfoSize is non-zero and DescriptorSize is NULL. + @retval EFI_INVALID_PARAMETER ImageInfoSize is non-zero and PackageVersion is NULL. + @retval EFI_INVALID_PARAMETER ImageInfoSize is non-zero and PackageVersionName is NULL. @retval EFI_DEVICE_ERROR Valid information could not be returned. Possible corrupted image. **/ EFI_STATUS EFIAPI -GetTheImageInfo ( +GetImageInfo ( IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL *This, IN OUT UINTN *ImageInfoSize, IN OUT EFI_FIRMWARE_IMAGE_DESCRIPTOR *ImageInfo, @@ -161,6 +168,8 @@ GetTheImageInfo ( @param[in] ImageIndex A unique number identifying the firmware image(s) within the device. The number is between 1 and DescriptorCount. @param[in, out] Image Points to the buffer where the current image is copied to. + May be NULL with a zero ImageSize in order to determine the size of the + buffer needed. @param[in, out] ImageSize On entry, points to the size of the buffer pointed to by Image, in bytes. On return, points to the length of the image, in bytes. @@ -168,7 +177,7 @@ GetTheImageInfo ( @retval EFI_BUFFER_TOO_SMALL The buffer specified by ImageSize is too small to hold the image. The current buffer size needed to hold the image is returned in ImageSize. - @retval EFI_INVALID_PARAMETER The Image was NULL. + @retval EFI_INVALID_PARAMETER The ImageSize is not too small and Image is NULL @retval EFI_NOT_FOUND The current image is not copied to the buffer. @retval EFI_UNSUPPORTED The operation is not supported. @retval EFI_SECURITY_VIOLATION The operation could not be performed due to an authentication failure. -- 2.38.1.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#116852): https://edk2.groups.io/g/devel/message/116852 Mute This Topic: https://groups.io/mt/105014729/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-