Reviewed-by: Liming Gao <gaolim...@byosoft.com.cn> > -----邮件原件----- > 发件人: Pethaiyan Madhan <madhan.pethai...@intel.com> > 发送时间: 2024年2月27日 17:46 > 收件人: devel@edk2.groups.io > 抄送: Pethaiyan Madhan <madhan.pethai...@intel.com>; Michael D Kinney > <michael.d.kin...@intel.com>; Liming Gao <gaolim...@byosoft.com.cn>; > Zhiguang Liu <zhiguang....@intel.com>; Yi Li <yi1...@intel.com>; GuoX Xu > <guox...@intel.com> > 主题: [PATCH V4] FmpDevicePkg: GetImageInfo Add missing conditions > > 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 > > 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 (#116438): https://edk2.groups.io/g/devel/message/116438 Mute This Topic: https://groups.io/mt/104765996/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-