summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHongbin1 Zhang <hongbin1.zhang@intel.com>2024-09-26 14:08:53 +0800
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>2024-11-05 01:04:30 +0000
commit734406184fa2a05f484ffa4d00bd4fdcdb0b5b22 (patch)
tree488a2c509c191d27f3958c31a275d74ccf32c45c
parent6f17fe30bffd0f6f72d61737e1c7c89e8138fdc0 (diff)
downloadedk2-734406184fa2a05f484ffa4d00bd4fdcdb0b5b22.tar.gz
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 <hongbin1.zhang@intel.com> Cc: Jiewen Yao <jiewen.yao@intel.com> Cc: Ray Ni <ray.ni@intel.com> Cc: Star Zeng <star.zeng@intel.com> Cc: Jiaxin Wu <jiaxin.wu@intel.com> Cc: Wei6 Xu <wei6.xu@intel.com> Cc: Sami Mujawar <sami.mujawar@arm.com> Cc: Ard Biesheuvel <ardb+tianocore@kernel.org> Cc: Supreeth Venkatesh <supreeth.venkatesh@arm.com>
-rw-r--r--StandaloneMmPkg/Drivers/StandaloneMmIplPei/MmFoundationHob.c13
1 files 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);
//