From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from out30-130.freemail.mail.aliyun.com (out30-130.freemail.mail.aliyun.com [115.124.30.130]) by mx.groups.io with SMTP id smtpd.web10.25607.1644409596074864870 for ; Wed, 09 Feb 2022 04:26:36 -0800 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: linux.alibaba.com, ip: 115.124.30.130, mailfrom: huangming@linux.alibaba.com) X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R131e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=e01e04394;MF=huangming@linux.alibaba.com;NM=1;PH=DS;RN=7;SR=0;TI=SMTPD_---0V4.E3mf_1644409590; Received: from 842effaa37a8.tbsite.net(mailfrom:huangming@linux.alibaba.com fp:SMTPD_---0V4.E3mf_1644409590) by smtp.aliyun-inc.com(127.0.0.1); Wed, 09 Feb 2022 20:26:31 +0800 From: "Ming Huang" To: devel@edk2.groups.io, sami.mujawar@arm.com, ardb+tianocore@kernel.org, jiewen.yao@intel.com, supreeth.venkatesh@arm.com Cc: ming.huang-@outlook.com, Ming Huang Subject: [PATCH v1 2/2] StandaloneMmPkg: Fix HOB space and heap space conflicted issue Date: Wed, 9 Feb 2022 20:25:58 +0800 Message-Id: <20220209122558.60329-3-huangming@linux.alibaba.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220209122558.60329-1-huangming@linux.alibaba.com> References: <20220209122558.60329-1-huangming@linux.alibaba.com> The heap space will be rewrote if a StandloneMmPkg module create HOB by BuildGuidHob() interface and write data to HOB space. Add a PCD PcdMemoryHobSize for pre-allocation a space to create HOB to fix this issue. Signed-off-by: Ming Huang --- StandaloneMmPkg/Core/StandaloneMmCore.c | 17 ++++++++++++++++- StandaloneMmPkg/Core/StandaloneMmCore.inf | 3 +++ StandaloneMmPkg/StandaloneMmPkg.dec | 2 ++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/StandaloneMmPkg/Core/StandaloneMmCore.c b/StandaloneMmPkg/Core/StandaloneMmCore.c index d221f1d111..1cf259d946 100644 --- a/StandaloneMmPkg/Core/StandaloneMmCore.c +++ b/StandaloneMmPkg/Core/StandaloneMmCore.c @@ -512,6 +512,9 @@ StandaloneMmMain ( EFI_MMRAM_DESCRIPTOR *MmramRanges; UINTN MmramRangeCount; EFI_HOB_FIRMWARE_VOLUME *BfvHob; + EFI_HOB_HANDOFF_INFO_TABLE *HandOffHobNew; + EFI_HOB_HANDOFF_INFO_TABLE *HandOffHobOrg; + UINT64 MaxHobSize = PcdGet64 (PcdMemoryHobSize); ProcessLibraryConstructorList (HobStart, &gMmCoreMmst); @@ -619,10 +622,22 @@ StandaloneMmMain ( // HobSize = GetHobListSize (HobStart); DEBUG ((DEBUG_INFO, "HobSize - 0x%x\n", HobSize)); - MmHobStart = AllocatePool (HobSize); + ASSERT (HobSize <= MaxHobSize); + MmHobStart = AllocatePool (MaxHobSize); DEBUG ((DEBUG_INFO, "MmHobStart - 0x%x\n", MmHobStart)); ASSERT (MmHobStart != NULL); CopyMem (MmHobStart, HobStart, HobSize); + // + // Initlialize the new HOB table + // + HandOffHobOrg = (EFI_HOB_HANDOFF_INFO_TABLE *)HobStart; + HandOffHobNew = (EFI_HOB_HANDOFF_INFO_TABLE *)MmHobStart; + HandOffHobNew->EfiEndOfHobList = (EFI_PHYSICAL_ADDRESS)MmHobStart + + (HandOffHobOrg->EfiEndOfHobList - (EFI_PHYSICAL_ADDRESS)HobStart); + HandOffHobNew->EfiFreeMemoryBottom = HandOffHobNew->EfiEndOfHobList + + sizeof (EFI_HOB_GENERIC_HEADER); + HandOffHobNew->EfiFreeMemoryTop = (EFI_PHYSICAL_ADDRESS)MmHobStart + MaxHobSize; + Status = MmInstallConfigurationTable (&gMmCoreMmst, &gEfiHobListGuid, MmHobStart, HobSize); ASSERT_EFI_ERROR (Status); diff --git a/StandaloneMmPkg/Core/StandaloneMmCore.inf b/StandaloneMmPkg/Core/StandaloneMmCore.inf index c44b9ff333..37e6135d73 100644 --- a/StandaloneMmPkg/Core/StandaloneMmCore.inf +++ b/StandaloneMmPkg/Core/StandaloneMmCore.inf @@ -76,6 +76,9 @@ gEfiEventExitBootServicesGuid gEfiEventReadyToBootGuid +[FixedPcd] + gStandaloneMmPkgTokenSpaceGuid.PcdMemoryHobSize + # # This configuration fails for CLANGPDB, which does not support PIE in the GCC # sense. Such however is required for ARM family StandaloneMmCore diff --git a/StandaloneMmPkg/StandaloneMmPkg.dec b/StandaloneMmPkg/StandaloneMmPkg.dec index 46784d94e4..cf554676e2 100644 --- a/StandaloneMmPkg/StandaloneMmPkg.dec +++ b/StandaloneMmPkg/StandaloneMmPkg.dec @@ -48,3 +48,5 @@ gEfiStandaloneMmNonSecureBufferGuid = { 0xf00497e3, 0xbfa2, 0x41a1, { 0x9d, 0x29, 0x54, 0xc2, 0xe9, 0x37, 0x21, 0xc5 }} gEfiArmTfCpuDriverEpDescriptorGuid = { 0x6ecbd5a1, 0xc0f8, 0x4702, { 0x83, 0x01, 0x4f, 0xc2, 0xc5, 0x47, 0x0a, 0x51 }} +[PcdsFixedAtBuild] + gStandaloneMmPkgTokenSpaceGuid.PcdMemoryHobSize|0x00000000|UINT64|0x00000004 -- 2.17.1