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 | 20 +++++++++++++++----- FmpDevicePkg/FmpDxe/FmpDxe.h | 15 ++++++++++++--- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/FmpDevicePkg/FmpDxe/FmpDxe.c b/FmpDevicePkg/FmpDxe/FmpDxe.c index 1e7ec4a09e..1d580c9f69 100644 --- a/FmpDevicePkg/FmpDxe/FmpDxe.c +++ b/FmpDevicePkg/FmpDxe/FmpDxe.c @@ -43,7 +43,7 @@ const FIRMWARE_MANAGEMENT_PRIVATE_DATA mFirmwareManagementPrivateDataTemplate = FIRMWARE_MANAGEMENT_PRIVATE_DATA_SIGNATURE, // Signature NULL, // Handle { // Fmp - GetTheImageInfo, + GetImageInfo, GetTheImage, SetTheImage, CheckTheImage, @@ -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 (#116556): https://edk2.groups.io/g/devel/message/116556 Mute This Topic: https://groups.io/mt/104819886/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-