From nobody Sun Feb 8 19:25:39 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+106826+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+106826+1787277+3901457@groups.io ARC-Seal: i=1; a=rsa-sha256; t=1689119587; cv=none; d=zohomail.com; s=zohoarc; b=BEOyOofnTT1DXonO21Ye3G3kcJ9N+jXg/s8ID/4QVPkwxVij9kQRrpd8aDQCiIqLLw7XfKdF68sPYnEnbAadKn1ohyq5aiR6vTv7JaFLAYw3O9brMFlnlfYztggZxRu8HJL6wVLCz+jdUziUNmvTMuu0yv/Z2Bbvnzk3q6XRnFI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1689119587; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=QPdbBtlO6PaGxSuwzmfxUpgT6V9IKKz75WfUxZ1cSHo=; b=dAEzqCaLp2G2xpA2tNmO5OVEQbBWdFyuZp1O15mkCy64w8rT8/Z7HPvqJXMJlUx76LgKDXdU44vpQq0miBCTf1mEg08K6s429kAiOgbBwCBzgpRAOYAcSJRp4CPjfcrOqK6YJrVKjXh23YQ4La9u8Ri9lJAiU3H5Vr5Y5OS2H38= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+106826+1787277+3901457@groups.io Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1689119587514118.72513939961391; Tue, 11 Jul 2023 16:53:07 -0700 (PDT) Return-Path: DKIM-Signature: a=rsa-sha256; bh=nwAJl3ZR/TpOlUzDJ3iZp4wfUgfORchv87CvAd7Nal4=; c=relaxed/simple; d=groups.io; h=X-Received:X-Received:X-Received:X-Gm-Message-State:X-Google-Smtp-Source:X-Received:X-Received:From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:MIME-Version:Precedence:List-Unsubscribe:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:Content-Transfer-Encoding; s=20140610; t=1689119587; v=1; b=D7Osodz3VOJzLzZQcf1w9ZQJVZaYLJBecDEuT8ZChdqvRQBWZgWyxdF4MBCy+sgEepo47iof zILjiSQ6vr9nyvWpWlT6TpCDxU7GxRWRDJ/QnKsD3UA5qlA0vClOjA1DXJrGTW4M64trWvsK8wz DcoqlFyY54nJr0NFCJOv9ZnU= X-Received: by 127.0.0.2 with SMTP id 2KZlYY1788612xcWV86Um2jk; Tue, 11 Jul 2023 16:53:07 -0700 X-Received: from mail-oi1-f182.google.com (mail-oi1-f182.google.com [209.85.167.182]) by mx.groups.io with SMTP id smtpd.web11.1761.1689119585825186160 for ; Tue, 11 Jul 2023 16:53:06 -0700 X-Received: by mail-oi1-f182.google.com with SMTP id 5614622812f47-3942c6584f0so4518765b6e.3 for ; Tue, 11 Jul 2023 16:53:05 -0700 (PDT) X-Gm-Message-State: 2hVH15ZAob0yIqjlgKJQhwsnx1787277AA= X-Google-Smtp-Source: APBJJlEOz9aD/GGHkJRvAFtTpgP6ZSAt0Ey+owKIM1POJ+NQ2XiymjUzGYgyMnunzIwKak1F0WsFng== X-Received: by 2002:a05:6808:23c2:b0:3a3:7ee9:8f17 with SMTP id bq2-20020a05680823c200b003a37ee98f17mr19173100oib.39.1689119584976; Tue, 11 Jul 2023 16:53:04 -0700 (PDT) X-Received: from localhost.localdomain ([50.46.230.135]) by smtp.gmail.com with ESMTPSA id a13-20020a62e20d000000b00660d80087a8sm2232677pfi.187.2023.07.11.16.53.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Jul 2023 16:53:04 -0700 (PDT) From: "Taylor Beebe" To: devel@edk2.groups.io Cc: Jian J Wang , Liming Gao , Dandan Bi Subject: [edk2-devel] [PATCH 03/14] MdeModulePkg: Add Phase-Specific MemoryProtectionHobLib Implementations Date: Tue, 11 Jul 2023 16:52:40 -0700 Message-ID: In-Reply-To: References: MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,t@taylorbeebe.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1689119589266100017 Content-Type: text/plain; charset="utf-8" From: Taylor Beebe Add DXE, SMM, and STANDALONE MM implementations of the MemoryProtectionHobLib. Signed-off-by: Taylor Beebe Cc: Jian J Wang Cc: Liming Gao Cc: Dandan Bi --- .../DxeMemoryProtectionHobLib.c | 132 ++++++++++++++++++ .../DxeMemoryProtectionHobLib.inf | 34 +++++ .../MmCommonMemoryProtectionHobLib.c | 89 ++++++++++++ .../SmmMemoryProtectionHobLib.c | 37 +++++ .../SmmMemoryProtectionHobLib.inf | 35 +++++ .../StandaloneMmMemoryProtectionHobLib.c | 37 +++++ .../StandaloneMmMemoryProtectionHobLib.inf | 36 +++++ MdeModulePkg/MdeModulePkg.dsc | 3 + 8 files changed, 403 insertions(+) create mode 100644 MdeModulePkg/Library/MemoryProtectionHobLib/DxeMemoryPr= otectionHobLib.c create mode 100644 MdeModulePkg/Library/MemoryProtectionHobLib/DxeMemoryPr= otectionHobLib.inf create mode 100644 MdeModulePkg/Library/MemoryProtectionHobLib/MmCommonMem= oryProtectionHobLib.c create mode 100644 MdeModulePkg/Library/MemoryProtectionHobLib/SmmMemoryPr= otectionHobLib.c create mode 100644 MdeModulePkg/Library/MemoryProtectionHobLib/SmmMemoryPr= otectionHobLib.inf create mode 100644 MdeModulePkg/Library/MemoryProtectionHobLib/StandaloneM= mMemoryProtectionHobLib.c create mode 100644 MdeModulePkg/Library/MemoryProtectionHobLib/StandaloneM= mMemoryProtectionHobLib.inf diff --git a/MdeModulePkg/Library/MemoryProtectionHobLib/DxeMemoryProtectio= nHobLib.c b/MdeModulePkg/Library/MemoryProtectionHobLib/DxeMemoryProtection= HobLib.c new file mode 100644 index 0000000000..fde568fcee --- /dev/null +++ b/MdeModulePkg/Library/MemoryProtectionHobLib/DxeMemoryProtectionHobLib= .c @@ -0,0 +1,132 @@ +/** @file +Library fills out gDxeMps global + +Copyright (c) Microsoft Corporation. +SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#include +#include +#include + +#include +#include +#include +#include + +DXE_MEMORY_PROTECTION_SETTINGS gDxeMps; + +/** + This function checks the memory protection settings and provides warning= s of settings conflicts. + For compatibility, this logic will only ever turn off protections to cre= ate consistency, + never turn others on. +**/ +VOID +DxeMemoryProtectionSettingsConsistencyCheck ( + VOID + ) +{ + if ((gDxeMps.HeapGuard.PoolGuardEnabled || gDxeMps.HeapGuard.PageGuardEn= abled) && + gDxeMps.HeapGuard.FreedMemoryGuardEnabled) + { + DEBUG (( + DEBUG_WARN, + "%a: - HeapGuard.FreedMemoryGuardEnabled and " + "UEFI HeapGuard.PoolGuardEnabled/HeapGuard.PageGuardEnabled " + "cannot be active at the same time. Setting all three to ZERO in " + "the memory protection settings global.\n", + __func__ + )); + ASSERT ( + !(gDxeMps.HeapGuard.FreedMemoryGuardEnabled && + (gDxeMps.HeapGuard.PoolGuardEnabled || gDxeMps.HeapGuard.PageGuard= Enabled)) + ); + gDxeMps.HeapGuard.PoolGuardEnabled =3D FALSE; + gDxeMps.HeapGuard.PageGuardEnabled =3D FALSE; + gDxeMps.HeapGuard.FreedMemoryGuardEnabled =3D FALSE; + } + + if (DXE_MPS_IS_ANY_MEMORY_TYPE_ACTIVE (&gDxeMps.PoolGuard) && + (!(gDxeMps.HeapGuard.PoolGuardEnabled))) + { + DEBUG (( + DEBUG_WARN, + "%a: - PoolGuard protections are active " + "but HeapGuard.PoolGuardEnabled is inactive.\n", + __func__ + )); + } + + if (DXE_MPS_IS_ANY_MEMORY_TYPE_ACTIVE (&gDxeMps.PageGuard) && + (!(gDxeMps.HeapGuard.PageGuardEnabled))) + { + DEBUG (( + DEBUG_WARN, + "%a: - PageGuard protections are active " + "but HeapGuard.PageGuardEnabled is inactive\n", + __func__ + )); + } + + if (gDxeMps.ExecutionProtection.EnabledForType[EfiBootServicesData] !=3D + gDxeMps.ExecutionProtection.EnabledForType[EfiConventionalMemory]) + { + DEBUG (( + DEBUG_WARN, + "%a: - EfiBootServicesData and EfiConventionalMemory must have the s= ame " + "ExecutionProtection value. Setting both to ZERO in the memory prote= ction " + "settings global.\n", + __func__ + )); + ASSERT ( + gDxeMps.ExecutionProtection.EnabledForType[EfiBootServicesData] =3D= =3D + gDxeMps.ExecutionProtection.EnabledForType[EfiConventionalMemory] + ); + gDxeMps.ExecutionProtection.EnabledForType[EfiBootServicesData] =3D = FALSE; + gDxeMps.ExecutionProtection.EnabledForType[EfiConventionalMemory] =3D = FALSE; + } +} + +/** + Populates gDxeMps global with the data present in the HOB. If the HOB en= try does not exist, + this constructor will zero the memory protection settings. + + @param[in] ImageHandle The firmware allocated handle for the EFI imag= e. + @param[in] SystemTable A pointer to the EFI System Table. + + @retval EFI_SUCCESS The constructor always returns EFI_SUCCESS. +**/ +EFI_STATUS +EFIAPI +DxeMemoryProtectionHobLibConstructor ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + VOID *Ptr; + DXE_MEMORY_PROTECTION_SETTINGS *DxeMps; + + Ptr =3D GetFirstGuidHob (&gDxeMemoryProtectionSettingsGuid); + + // + // Cache the Memory Protection Settings HOB entry + // + if (Ptr !=3D NULL) { + DxeMps =3D (DXE_MEMORY_PROTECTION_SETTINGS *)GET_GUID_HOB_DATA (Ptr); + if (!DXE_MPS_IS_STRUCT_VALID (DxeMps)) { + DEBUG (( + DEBUG_ERROR, + "%a: - Version number of the DXE Memory Protection Settings HOB is= invalid!\n", + __func__ + )); + ASSERT (DXE_MPS_IS_STRUCT_VALID (DxeMps)); + ZeroMem (&gDxeMps, sizeof (gDxeMps)); + return EFI_SUCCESS; + } + + CopyMem (&gDxeMps, DxeMps, sizeof (DXE_MEMORY_PROTECTION_SETTINGS)); + DxeMemoryProtectionSettingsConsistencyCheck (); + } + + return EFI_SUCCESS; +} diff --git a/MdeModulePkg/Library/MemoryProtectionHobLib/DxeMemoryProtectio= nHobLib.inf b/MdeModulePkg/Library/MemoryProtectionHobLib/DxeMemoryProtecti= onHobLib.inf new file mode 100644 index 0000000000..57ca55446b --- /dev/null +++ b/MdeModulePkg/Library/MemoryProtectionHobLib/DxeMemoryProtectionHobLib= .inf @@ -0,0 +1,34 @@ +## @file +# DXE library instance to support platform-specific global controls for al= l memory protections. +# +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: BSD-2-Clause-Patent +## + +[Defines] + INF_VERSION =3D 0x00010005 + BASE_NAME =3D DxeMemoryProtectionHobLib + FILE_GUID =3D f497f7de-b9ab-4b9f-807e-89778922542d + MODULE_TYPE =3D UEFI_DRIVER + VERSION_STRING =3D 1.0 + LIBRARY_CLASS =3D DxeMemoryProtectionHobLib|DXE_DRIVER = DXE_CORE UEFI_APPLICATION UEFI_DRIVER + CONSTRUCTOR =3D DxeMemoryProtectionHobLibConstructor + +# +# VALID_ARCHITECTURES =3D IA32 X64 AARCH64 +# + +[Sources] + DxeMemoryProtectionHobLib.c + +[Packages] + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec + +[LibraryClasses] + HobLib + DebugLib + BaseMemoryLib + +[Guids] + gDxeMemoryProtectionSettingsGuid diff --git a/MdeModulePkg/Library/MemoryProtectionHobLib/MmCommonMemoryProt= ectionHobLib.c b/MdeModulePkg/Library/MemoryProtectionHobLib/MmCommonMemory= ProtectionHobLib.c new file mode 100644 index 0000000000..73f4b0cd88 --- /dev/null +++ b/MdeModulePkg/Library/MemoryProtectionHobLib/MmCommonMemoryProtectionH= obLib.c @@ -0,0 +1,89 @@ +/** @file +Library fills out gMmMps global + +Copyright (c) Microsoft Corporation. +SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#include +#include +#include + +#include +#include +#include +#include + +MM_MEMORY_PROTECTION_SETTINGS gMmMps; + +/** + This function checks the memory protection settings and provides warning= s of settings conflicts. + For compatibility, this logic will only ever turn off protections to cre= ate consistency, + never turn others on. +**/ +VOID +MmMemoryProtectionSettingsConsistencyCheck ( + VOID + ) +{ + if (MM_MPS_IS_ANY_MEMORY_TYPE_ACTIVE (&gMmMps.PoolGuard) && + (!gMmMps.HeapGuard.PoolGuardEnabled)) + { + DEBUG (( + DEBUG_WARN, + "%a: - PoolGuard protections are active " + "but HeapGuard.PoolGuardEnabled is inactive.\n", + __func__ + )); + } + + if (MM_MPS_IS_ANY_MEMORY_TYPE_ACTIVE (&gMmMps.PageGuard) && + (!gMmMps.HeapGuard.PageGuardEnabled)) + { + DEBUG (( + DEBUG_WARN, + "%a: - PageGuard protections are active " + "but HeapGuard.PageGuardEnabled is inactive\n", + __func__ + )); + } +} + +/** + Abstraction layer for library constructor of Standalone MM and SMM insta= nces. + + @retval EFI_SUCCESS The constructor always returns EFI_SUCCESS. +**/ +EFI_STATUS +EFIAPI +MmMemoryProtectionHobLibConstructorCommon ( + VOID + ) +{ + VOID *Ptr; + MM_MEMORY_PROTECTION_SETTINGS *MmMps; + + Ptr =3D GetFirstGuidHob (&gMmMemoryProtectionSettingsGuid); + + // + // Cache the Memory Protection Settings HOB entry + // + if (Ptr !=3D NULL) { + MmMps =3D (MM_MEMORY_PROTECTION_SETTINGS *)GET_GUID_HOB_DATA (Ptr); + if (!MM_MPS_IS_STRUCT_VALID (MmMps)) { + DEBUG (( + DEBUG_ERROR, + "%a: - Version number of the MM Memory Protection Settings HOB is = invalid!\n", + __func__ + )); + ASSERT (MM_MPS_IS_STRUCT_VALID (MmMps)); + ZeroMem (&gMmMps, sizeof (gMmMps)); + return EFI_SUCCESS; + } + + CopyMem (&gMmMps, MmMps, sizeof (MM_MEMORY_PROTECTION_SETTINGS)); + MmMemoryProtectionSettingsConsistencyCheck (); + } + + return EFI_SUCCESS; +} diff --git a/MdeModulePkg/Library/MemoryProtectionHobLib/SmmMemoryProtectio= nHobLib.c b/MdeModulePkg/Library/MemoryProtectionHobLib/SmmMemoryProtection= HobLib.c new file mode 100644 index 0000000000..fffc90a721 --- /dev/null +++ b/MdeModulePkg/Library/MemoryProtectionHobLib/SmmMemoryProtectionHobLib= .c @@ -0,0 +1,37 @@ +/** @file +Library fills out gMmMps global + +Copyright (c) Microsoft Corporation. +SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#include + +/** + Abstraction layer for library constructor of Standalone MM and SMM insta= nces. + + @retval EFI_SUCCESS The constructor always returns EFI_SUCCESS. +**/ +EFI_STATUS +EFIAPI +MmMemoryProtectionHobLibConstructorCommon ( + VOID + ); + +/** + Library constructor of SMM instance. + + @param[in] ImageHandle The firmware allocated handle for the EFI imag= e. + @param[in] SystemTable A pointer to the EFI System Table. + + @retval EFI_SUCCESS The constructor always returns EFI_SUCCESS. +**/ +EFI_STATUS +EFIAPI +SmmMemoryProtectionHobLibConstructor ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + return MmMemoryProtectionHobLibConstructorCommon (); +} diff --git a/MdeModulePkg/Library/MemoryProtectionHobLib/SmmMemoryProtectio= nHobLib.inf b/MdeModulePkg/Library/MemoryProtectionHobLib/SmmMemoryProtecti= onHobLib.inf new file mode 100644 index 0000000000..4651158bd4 --- /dev/null +++ b/MdeModulePkg/Library/MemoryProtectionHobLib/SmmMemoryProtectionHobLib= .inf @@ -0,0 +1,35 @@ +## @file +# SMM library instance to support platform-specific global controls for al= l memory protections. +# +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: BSD-2-Clause-Patent +## + +[Defines] + INF_VERSION =3D 0x00010005 + BASE_NAME =3D SmmMemoryProtectionHobLib + FILE_GUID =3D dc9666f4-917f-400d-8026-2b3beeeff195 + MODULE_TYPE =3D DXE_SMM_DRIVER + VERSION_STRING =3D 1.0 + LIBRARY_CLASS =3D MmMemoryProtectionHobLib|SMM_CORE DXE= _SMM_DRIVER + CONSTRUCTOR =3D SmmMemoryProtectionHobLibConstructor + +# +# VALID_ARCHITECTURES =3D IA32 X64 AARCH64 +# + +[Sources] + MmCommonMemoryProtectionHobLib.c + SmmMemoryProtectionHobLib.c + +[Packages] + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec + +[LibraryClasses] + HobLib + DebugLib + BaseMemoryLib + +[Guids] + gMmMemoryProtectionSettingsGuid diff --git a/MdeModulePkg/Library/MemoryProtectionHobLib/StandaloneMmMemory= ProtectionHobLib.c b/MdeModulePkg/Library/MemoryProtectionHobLib/Standalone= MmMemoryProtectionHobLib.c new file mode 100644 index 0000000000..3fd8b9f259 --- /dev/null +++ b/MdeModulePkg/Library/MemoryProtectionHobLib/StandaloneMmMemoryProtect= ionHobLib.c @@ -0,0 +1,37 @@ +/** @file +Library fills out gMmMps global + +Copyright (c) Microsoft Corporation. +SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#include + +/** + Abstraction layer for library constructor of Standalone MM and SMM insta= nces. + + @retval EFI_SUCCESS The constructor always returns EFI_SUCCESS. +**/ +EFI_STATUS +EFIAPI +MmMemoryProtectionHobLibConstructorCommon ( + VOID + ); + +/** + Library constructor of Standalone MM instance. + + @param[in] ImageHandle The firmware allocated handle for the EFI imag= e. + @param[in] SystemTable A pointer to the EFI MM System Table. + + @retval EFI_SUCCESS The constructor always returns EFI_SUCCESS. +**/ +EFI_STATUS +EFIAPI +StandaloneMmMemoryProtectionHobLibConstructor ( + IN EFI_HANDLE ImageHandle, + IN EFI_MM_SYSTEM_TABLE *SystemTable + ) +{ + return MmMemoryProtectionHobLibConstructorCommon (); +} diff --git a/MdeModulePkg/Library/MemoryProtectionHobLib/StandaloneMmMemory= ProtectionHobLib.inf b/MdeModulePkg/Library/MemoryProtectionHobLib/Standalo= neMmMemoryProtectionHobLib.inf new file mode 100644 index 0000000000..3cadb5ec6e --- /dev/null +++ b/MdeModulePkg/Library/MemoryProtectionHobLib/StandaloneMmMemoryProtect= ionHobLib.inf @@ -0,0 +1,36 @@ +## @file +# SMM library instance to support platform-specific global controls for al= l memory protections. +# +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: BSD-2-Clause-Patent +## + +[Defines] + INF_VERSION =3D 0x00010005 + BASE_NAME =3D StandaloneMmMemoryProtectionHobLib + FILE_GUID =3D C0A0D9C4-A249-483A-86EA-D73146D397B3 + MODULE_TYPE =3D MM_CORE_STANDALONE + PI_SPECIFICATION_VERSION =3D 0x00010032 + VERSION_STRING =3D 1.0 + LIBRARY_CLASS =3D MmMemoryProtectionHobLib|MM_CORE_STAN= DALONE MM_STANDALONE + CONSTRUCTOR =3D StandaloneMmMemoryProtectionHobLibCon= structor + +# +# VALID_ARCHITECTURES =3D IA32 X64 AARCH64 +# + +[Sources] + MmCommonMemoryProtectionHobLib.c + StandaloneMmMemoryProtectionHobLib.c + +[Packages] + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec + +[LibraryClasses] + HobLib + DebugLib + BaseMemoryLib + +[Guids] + gMmMemoryProtectionSettingsGuid diff --git a/MdeModulePkg/MdeModulePkg.dsc b/MdeModulePkg/MdeModulePkg.dsc index 3fad493c7f..ec3c8913ad 100644 --- a/MdeModulePkg/MdeModulePkg.dsc +++ b/MdeModulePkg/MdeModulePkg.dsc @@ -237,6 +237,9 @@ MdeModulePkg/Library/DebugAgentLibNull/DebugAgentLibNull.inf MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf MdeModulePkg/Library/LockBoxNullLib/LockBoxNullLib.inf + MdeModulePkg/Library/MemoryProtectionHobLib/DxeMemoryProtectionHobLib.inf + MdeModulePkg/Library/MemoryProtectionHobLib/SmmMemoryProtectionHobLib.inf + MdeModulePkg/Library/MemoryProtectionHobLib/StandaloneMmMemoryProtection= HobLib.inf MdeModulePkg/Library/MemoryProtectionHobLibNull/DxeMemoryProtectionHobLi= bNull.inf MdeModulePkg/Library/MemoryProtectionHobLibNull/MmMemoryProtectionHobLib= Null.inf MdeModulePkg/Library/PciHostBridgeLibNull/PciHostBridgeLibNull.inf --=20 2.41.0.windows.2 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#106826): https://edk2.groups.io/g/devel/message/106826 Mute This Topic: https://groups.io/mt/100090633/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-