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>
This commit is contained in:
Hongbin1 Zhang 2024-09-26 14:08:53 +08:00 committed by mergify[bot]
parent 6f17fe30bf
commit 734406184f

View File

@ -117,10 +117,9 @@ MmIplBuildFvHob (
EFI_HOB_FIRMWARE_VOLUME *FvHob; EFI_HOB_FIRMWARE_VOLUME *FvHob;
UINT16 HobLength; UINT16 HobLength;
ASSERT (Hob != NULL);
HobLength = ALIGN_VALUE (sizeof (EFI_HOB_FIRMWARE_VOLUME), 8); HobLength = ALIGN_VALUE (sizeof (EFI_HOB_FIRMWARE_VOLUME), 8);
if (*HobBufferSize >= HobLength) { if (*HobBufferSize >= HobLength) {
ASSERT (Hob != NULL);
MmIplCreateHob (Hob, EFI_HOB_TYPE_FV, sizeof (EFI_HOB_FIRMWARE_VOLUME)); MmIplCreateHob (Hob, EFI_HOB_TYPE_FV, sizeof (EFI_HOB_FIRMWARE_VOLUME));
FvHob = (EFI_HOB_FIRMWARE_VOLUME *)Hob; FvHob = (EFI_HOB_FIRMWARE_VOLUME *)Hob;
@ -153,10 +152,9 @@ MmIplBuildMmAcpiS3EnableHob (
MM_ACPI_S3_ENABLE *MmAcpiS3Enable; MM_ACPI_S3_ENABLE *MmAcpiS3Enable;
UINT16 HobLength; UINT16 HobLength;
ASSERT (Hob != NULL);
HobLength = ALIGN_VALUE (sizeof (EFI_HOB_GUID_TYPE) + sizeof (MM_ACPI_S3_ENABLE), 8); HobLength = ALIGN_VALUE (sizeof (EFI_HOB_GUID_TYPE) + sizeof (MM_ACPI_S3_ENABLE), 8);
if (*HobBufferSize >= HobLength) { if (*HobBufferSize >= HobLength) {
ASSERT (Hob != NULL);
MmIplCreateHob (Hob, EFI_HOB_TYPE_GUID_EXTENSION, HobLength); MmIplCreateHob (Hob, EFI_HOB_TYPE_GUID_EXTENSION, HobLength);
GuidHob = (EFI_HOB_GUID_TYPE *)Hob; GuidHob = (EFI_HOB_GUID_TYPE *)Hob;
@ -191,12 +189,11 @@ MmIplBuildMmCpuSyncConfigHob (
MM_CPU_SYNC_CONFIG *MmSyncModeInfoHob; MM_CPU_SYNC_CONFIG *MmSyncModeInfoHob;
UINT16 HobLength; UINT16 HobLength;
ASSERT (Hob != NULL);
GuidHob = (EFI_HOB_GUID_TYPE *)(UINTN)Hob; GuidHob = (EFI_HOB_GUID_TYPE *)(UINTN)Hob;
HobLength = ALIGN_VALUE (sizeof (EFI_HOB_GUID_TYPE) + sizeof (MM_CPU_SYNC_CONFIG), 8); HobLength = ALIGN_VALUE (sizeof (EFI_HOB_GUID_TYPE) + sizeof (MM_CPU_SYNC_CONFIG), 8);
if (*HobBufferSize >= HobLength) { if (*HobBufferSize >= HobLength) {
ASSERT (Hob != NULL);
MmIplCreateHob (GuidHob, EFI_HOB_TYPE_GUID_EXTENSION, HobLength); MmIplCreateHob (GuidHob, EFI_HOB_TYPE_GUID_EXTENSION, HobLength);
CopyGuid (&GuidHob->Name, &gMmCpuSyncConfigHobGuid); CopyGuid (&GuidHob->Name, &gMmCpuSyncConfigHobGuid);
@ -240,6 +237,7 @@ MmIplCopyGuidHob (
while (GuidHob != NULL) { while (GuidHob != NULL) {
if (*HobBufferSize >= UsedSize + GuidHob->HobLength) { if (*HobBufferSize >= UsedSize + GuidHob->HobLength) {
ASSERT (HobBuffer != NULL);
CopyMem (HobBuffer + UsedSize, GuidHob, GuidHob->HobLength); CopyMem (HobBuffer + UsedSize, GuidHob, GuidHob->HobLength);
} }
@ -285,13 +283,13 @@ MmIplBuildMmCoreModuleHob (
UINT16 HobLength; UINT16 HobLength;
EFI_HOB_MEMORY_ALLOCATION_MODULE *MmCoreModuleHob; EFI_HOB_MEMORY_ALLOCATION_MODULE *MmCoreModuleHob;
ASSERT (Hob != NULL);
ASSERT (ADDRESS_IS_ALIGNED (Base, EFI_PAGE_SIZE)); ASSERT (ADDRESS_IS_ALIGNED (Base, EFI_PAGE_SIZE));
ASSERT (IS_ALIGNED (Length, EFI_PAGE_SIZE)); ASSERT (IS_ALIGNED (Length, EFI_PAGE_SIZE));
ASSERT (EntryPoint >= Base && EntryPoint < Base + Length); ASSERT (EntryPoint >= Base && EntryPoint < Base + Length);
HobLength = ALIGN_VALUE (sizeof (EFI_HOB_MEMORY_ALLOCATION_MODULE), 8); HobLength = ALIGN_VALUE (sizeof (EFI_HOB_MEMORY_ALLOCATION_MODULE), 8);
if (*HobBufferSize >= HobLength) { if (*HobBufferSize >= HobLength) {
ASSERT (Hob != NULL);
MmIplCreateHob (Hob, EFI_HOB_TYPE_MEMORY_ALLOCATION, sizeof (EFI_HOB_MEMORY_ALLOCATION_MODULE)); MmIplCreateHob (Hob, EFI_HOB_TYPE_MEMORY_ALLOCATION, sizeof (EFI_HOB_MEMORY_ALLOCATION_MODULE));
MmCoreModuleHob = (EFI_HOB_MEMORY_ALLOCATION_MODULE *)Hob; MmCoreModuleHob = (EFI_HOB_MEMORY_ALLOCATION_MODULE *)Hob;
@ -389,6 +387,7 @@ MmIplBuildMmProfileHobs (
// Build memory allocation HOB // Build memory allocation HOB
// //
ASSERT (Hob.MemoryAllocation->Header.HobLength == ALIGN_VALUE (sizeof (EFI_HOB_MEMORY_ALLOCATION), 8)); ASSERT (Hob.MemoryAllocation->Header.HobLength == ALIGN_VALUE (sizeof (EFI_HOB_MEMORY_ALLOCATION), 8));
ASSERT (HobBuffer != NULL);
CopyMem (HobBuffer, Hob.Raw, Hob.MemoryAllocation->Header.HobLength); CopyMem (HobBuffer, Hob.Raw, Hob.MemoryAllocation->Header.HobLength);
// //