Update to follow Tiano Coding style. Fix potential NULL memory copy Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chao Zhang <chao.b.zh...@intel.com> --- MdeModulePkg/Universal/EsrtDxe/EsrtDxe.c | 25 ++++++++++++++++++++----- MdeModulePkg/Universal/EsrtDxe/EsrtDxe.inf | 5 +++-- MdeModulePkg/Universal/EsrtDxe/EsrtImpl.c | 8 ++++---- MdeModulePkg/Universal/EsrtDxe/EsrtImpl.h | 10 +++++----- 4 files changed, 32 insertions(+), 16 deletions(-)
diff --git a/MdeModulePkg/Universal/EsrtDxe/EsrtDxe.c b/MdeModulePkg/Universal/EsrtDxe/EsrtDxe.c index 8f76cea..57c4710 100644 --- a/MdeModulePkg/Universal/EsrtDxe/EsrtDxe.c +++ b/MdeModulePkg/Universal/EsrtDxe/EsrtDxe.c @@ -33,7 +33,7 @@ ESRT_MANAGEMENT_PROTOCOL mEsrtManagementProtocolTemplate = { Get ESRT entry from ESRT Cache by FwClass Guid @param[in] FwClass FwClass of Esrt entry to get - @param[in out] Entry Esrt entry returned + @param[in, out] Entry Esrt entry returned @retval EFI_SUCCESS The variable saving this Esrt Entry exists. @retval EF_NOT_FOUND No correct variable found. @@ -217,7 +217,7 @@ EsrtDxeRegisterEsrtEntry( /** This function syn up Cached ESRT with data from FMP instances Function should be called after Connect All in order to locate all FMP protocols - installed + installed. @retval EFI_SUCCESS Successfully sync cache repository from FMP instances @retval EFI_NOT_FOUND No FMP Instance are found @@ -324,7 +324,7 @@ EsrtDxeSyncFmp( Status = gBS->HandleProtocol( HandleBuffer[Index1], &gEfiFirmwareManagementProtocolGuid, - &FmpBuf[Index1] + (VOID **)&FmpBuf[Index1] ); if (EFI_ERROR(Status)) { @@ -587,8 +587,13 @@ EsrtReadyToBootEventNotify ( EsrtTable->FwResourceCount = (UINT32)((NonFmpRepositorySize + FmpRepositorySize) / sizeof(EFI_SYSTEM_RESOURCE_ENTRY)); EsrtTable->FwResourceCountMax = PcdGet32(PcdMaxNonFmpEsrtCacheNum) + PcdGet32(PcdMaxFmpEsrtCacheNum); - CopyMem(EsrtTable + 1, NonFmpEsrtRepository, NonFmpRepositorySize); - CopyMem((UINT8 *)(EsrtTable + 1) + NonFmpRepositorySize, FmpEsrtRepository, FmpRepositorySize); + if (NonFmpRepositorySize != 0 && NonFmpEsrtRepository != NULL) { + CopyMem(EsrtTable + 1, NonFmpEsrtRepository, NonFmpRepositorySize); + } + + if (FmpRepositorySize != 0 && FmpEsrtRepository != NULL) { + CopyMem((UINT8 *)(EsrtTable + 1) + NonFmpRepositorySize, FmpEsrtRepository, FmpRepositorySize); + } // // Publish Esrt to system config table @@ -611,7 +616,17 @@ EXIT: } } +/** + The module Entry Point of the Esrt DXE driver that manages cached ESRT repository + & publishes ESRT table + @param[in] ImageHandle The firmware allocated handle for the EFI image. + @param[in] SystemTable A pointer to the EFI System Table. + + @retval EFI_SUCCESS The entry point is executed successfully. + @retval Other Some error occurs when executing this entry point. + +**/ EFI_STATUS EFIAPI EsrtDxeEntryPoint ( diff --git a/MdeModulePkg/Universal/EsrtDxe/EsrtDxe.inf b/MdeModulePkg/Universal/EsrtDxe/EsrtDxe.inf index daadee6..ca0ae33 100644 --- a/MdeModulePkg/Universal/EsrtDxe/EsrtDxe.inf +++ b/MdeModulePkg/Universal/EsrtDxe/EsrtDxe.inf @@ -30,6 +30,7 @@ # [Sources] + EsrtImpl.h EsrtImpl.c EsrtDxe.c @@ -50,8 +51,8 @@ PrintLib [Guids] - gEfiSystemResourceTableGuid ## PRODUCES - gEfiEventReadyToBootGuid ## CONSUMES + gEfiSystemResourceTableGuid ## PRODUCES ## SystemTable + gEfiEventReadyToBootGuid ## CONSUMES ## Event [Protocols] gEfiFirmwareManagementProtocolGuid ## SOMETIMES_CONSUMES diff --git a/MdeModulePkg/Universal/EsrtDxe/EsrtImpl.c b/MdeModulePkg/Universal/EsrtDxe/EsrtImpl.c index 95f6220..bc28919 100644 --- a/MdeModulePkg/Universal/EsrtDxe/EsrtImpl.c +++ b/MdeModulePkg/Universal/EsrtDxe/EsrtImpl.c @@ -174,7 +174,7 @@ InsertEsrtEntry( goto EXIT; } - if (RepositorySize != 0) { + if (RepositorySize != 0 && EsrtRepository != NULL) { CopyMem(EsrtRepositoryNew, EsrtRepository, RepositorySize); } CopyMem((UINT8 *)EsrtRepositoryNew + RepositorySize, Entry, sizeof(EFI_SYSTEM_RESOURCE_ENTRY)); @@ -393,9 +393,9 @@ EXIT: /** Init one ESRT entry according to input FmpImageInfo (V1, V2, V3) . - @param[in] EsrtEntry Esrt entry to be Init - @param[in] FmpImageInfo FMP image info descriptor - @param[in] DescriptorVersion FMP Image info descriptor version + @param[in, out] EsrtEntry Esrt entry to be Init + @param[in] FmpImageInfo FMP image info descriptor + @param[in] DescriptorVersion FMP Image info descriptor version **/ VOID diff --git a/MdeModulePkg/Universal/EsrtDxe/EsrtImpl.h b/MdeModulePkg/Universal/EsrtDxe/EsrtImpl.h index 227b9b3..a576890 100644 --- a/MdeModulePkg/Universal/EsrtDxe/EsrtImpl.h +++ b/MdeModulePkg/Universal/EsrtDxe/EsrtImpl.h @@ -137,9 +137,9 @@ UpdateEsrtEntry( /** Init one ESRT entry according to input FmpImageInfo (V1, V2, V3) . - @param[in] EsrtEntry Esrt entry to be Init - @param[in] FmpImageInfo FMP image info descriptor - @param[in] DescriptorVersion FMP Image info descriptor version + @param[in, out] EsrtEntry Esrt entry to be Init + @param[in] FmpImageInfo FMP image info descriptor + @param[in] DescriptorVersion FMP Image info descriptor version **/ VOID @@ -153,7 +153,7 @@ SetEsrtEntryFromFmpInfo ( Get ESRT entry from ESRT Cache by FwClass Guid @param[in] FwClass FwClass of Esrt entry to get - @param[in out] Entry Esrt entry returned + @param[in, out] Entry Esrt entry returned @retval EFI_SUCCESS The variable saving this Esrt Entry exists. @retval EF_NOT_FOUND No correct variable found. @@ -215,7 +215,7 @@ EsrtDxeRegisterEsrtEntry( /** This function syn up Cached ESRT with data from FMP instances Function should be called after Connect All in order to locate all FMP protocols - installed + installed. @retval EFI_SUCCESS Successfully sync cache repository from FMP instances @retval EFI_NOT_FOUND No FMP Instance are found -- 1.9.5.msysgit.1 ------------------------------------------------------------------------------ One dashboard for servers and applications across Physical-Virtual-Cloud Widest out-of-the-box monitoring support with 50+ applications Performance metrics, stats and reports that give you Actionable Insights Deep dive visibility with transaction tracing using APM Insight. http://ad.doubleclick.net/ddm/clk/290420510;117567292;y _______________________________________________ edk2-devel mailing list edk2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/edk2-devel