From 734406184fa2a05f484ffa4d00bd4fdcdb0b5b22 Mon Sep 17 00:00:00 2001 From: Hongbin1 Zhang Date: Thu, 26 Sep 2024 14:08:53 +0800 Subject: StandaloneMmPkg/MmIpl: Optimize hob pointer check flow Clang compile will optimize undefined behavior (UB) like a pointer with NULL + size, so it is better to check the pointer before using it. Signed-off-by: Hongbin1 Zhang Cc: Jiewen Yao Cc: Ray Ni Cc: Star Zeng Cc: Jiaxin Wu Cc: Wei6 Xu Cc: Sami Mujawar Cc: Ard Biesheuvel Cc: Supreeth Venkatesh --- .../Drivers/StandaloneMmIplPei/MmFoundationHob.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/StandaloneMmPkg/Drivers/StandaloneMmIplPei/MmFoundationHob.c b/StandaloneMmPkg/Drivers/StandaloneMmIplPei/MmFoundationHob.c index e53844f5eb..b2611f2b49 100644 --- a/StandaloneMmPkg/Drivers/StandaloneMmIplPei/MmFoundationHob.c +++ b/StandaloneMmPkg/Drivers/StandaloneMmIplPei/MmFoundationHob.c @@ -117,10 +117,9 @@ MmIplBuildFvHob ( EFI_HOB_FIRMWARE_VOLUME *FvHob; UINT16 HobLength; - ASSERT (Hob != NULL); - HobLength = ALIGN_VALUE (sizeof (EFI_HOB_FIRMWARE_VOLUME), 8); if (*HobBufferSize >= HobLength) { + ASSERT (Hob != NULL); MmIplCreateHob (Hob, EFI_HOB_TYPE_FV, sizeof (EFI_HOB_FIRMWARE_VOLUME)); FvHob = (EFI_HOB_FIRMWARE_VOLUME *)Hob; @@ -153,10 +152,9 @@ MmIplBuildMmAcpiS3EnableHob ( MM_ACPI_S3_ENABLE *MmAcpiS3Enable; UINT16 HobLength; - ASSERT (Hob != NULL); - HobLength = ALIGN_VALUE (sizeof (EFI_HOB_GUID_TYPE) + sizeof (MM_ACPI_S3_ENABLE), 8); if (*HobBufferSize >= HobLength) { + ASSERT (Hob != NULL); MmIplCreateHob (Hob, EFI_HOB_TYPE_GUID_EXTENSION, HobLength); GuidHob = (EFI_HOB_GUID_TYPE *)Hob; @@ -191,12 +189,11 @@ MmIplBuildMmCpuSyncConfigHob ( MM_CPU_SYNC_CONFIG *MmSyncModeInfoHob; UINT16 HobLength; - ASSERT (Hob != NULL); - GuidHob = (EFI_HOB_GUID_TYPE *)(UINTN)Hob; HobLength = ALIGN_VALUE (sizeof (EFI_HOB_GUID_TYPE) + sizeof (MM_CPU_SYNC_CONFIG), 8); if (*HobBufferSize >= HobLength) { + ASSERT (Hob != NULL); MmIplCreateHob (GuidHob, EFI_HOB_TYPE_GUID_EXTENSION, HobLength); CopyGuid (&GuidHob->Name, &gMmCpuSyncConfigHobGuid); @@ -240,6 +237,7 @@ MmIplCopyGuidHob ( while (GuidHob != NULL) { if (*HobBufferSize >= UsedSize + GuidHob->HobLength) { + ASSERT (HobBuffer != NULL); CopyMem (HobBuffer + UsedSize, GuidHob, GuidHob->HobLength); } @@ -285,13 +283,13 @@ MmIplBuildMmCoreModuleHob ( UINT16 HobLength; EFI_HOB_MEMORY_ALLOCATION_MODULE *MmCoreModuleHob; - ASSERT (Hob != NULL); ASSERT (ADDRESS_IS_ALIGNED (Base, EFI_PAGE_SIZE)); ASSERT (IS_ALIGNED (Length, EFI_PAGE_SIZE)); ASSERT (EntryPoint >= Base && EntryPoint < Base + Length); HobLength = ALIGN_VALUE (sizeof (EFI_HOB_MEMORY_ALLOCATION_MODULE), 8); if (*HobBufferSize >= HobLength) { + ASSERT (Hob != NULL); MmIplCreateHob (Hob, EFI_HOB_TYPE_MEMORY_ALLOCATION, sizeof (EFI_HOB_MEMORY_ALLOCATION_MODULE)); MmCoreModuleHob = (EFI_HOB_MEMORY_ALLOCATION_MODULE *)Hob; @@ -389,6 +387,7 @@ MmIplBuildMmProfileHobs ( // Build memory allocation HOB // ASSERT (Hob.MemoryAllocation->Header.HobLength == ALIGN_VALUE (sizeof (EFI_HOB_MEMORY_ALLOCATION), 8)); + ASSERT (HobBuffer != NULL); CopyMem (HobBuffer, Hob.Raw, Hob.MemoryAllocation->Header.HobLength); // -- cgit