mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-27 15:44:04 +02:00
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:
parent
6f17fe30bf
commit
734406184f
@ -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);
|
||||||
|
|
||||||
//
|
//
|
||||||
|
Loading…
x
Reference in New Issue
Block a user