BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3974
CcProbeLib once was designed to probe the Confidential Computing guest type by checking the PcdOvmfWorkArea. But this memory is allocated with either EfiACPIMemoryNVS or EfiBootServicesData. It cannot be accessed after ExitBootService. Please see the detailed analysis in BZ#3974. To fix this issue, CcProbeLib is re-designed as 2 implementation: - SecPeiCcProbeLib - DxeCcProbeLib In SecPeiCcProbeLib we check the CC guest type by reading the PcdOvmfWorkArea. Because it is used in SEC / PEI and we don't worry about the issues in BZ#3974. In DxeCcProbeLib we cache the GuestType in Ovmf work area in a global variable. After that the Guest type is returned with the cached value. So that we don't need to worry about the access to Ovmf work area after ExitBootService. The reason why we probe CC guest type in 2 different ways is the global variable. Global variable cannot be used in SEC/PEI and CcProbe is called very frequently. Code: https://github.com/mxu9/edk2/tree/CcProbeLib.BZ3974.v4 v5 changes: - Fix typos in commit message. - No other changes in code. v4 changes: - Read Cc guest type in both DxeCcProbeLib's constructor and CcProbe. So that we guarantee the Cc guest type is read early enough. v3 changes: - Re-design CcProbeLib to 2 implementation: SecPeiCcProbeLib and DxeCcProbeLib. The difference between the 2 implementation is the cache of the CcGuestType. v2 changes: - Reserve Ovmf work-area as RT_DATA. See https://edk2.groups.io/g/devel/message/92599 Cc: Gerd Hoffmann <kra...@redhat.com> Cc: Erdem Aktas <erdemak...@google.com> Cc: James Bottomley <j...@linux.ibm.com> Cc: Jiewen Yao <jiewen....@intel.com> Cc: Tom Lendacky <thomas.lenda...@amd.com> Cc: Yuan Yu <yua...@google.com> Acked: Gerd Hoffmann <kra...@redhat.com> Signed-off-by: Min Xu <min.m...@intel.com> Min M Xu (2): OvmfPkg: Add SecPeiCcProbeLib OvmfPkg: Update CcProbeLib to DxeCcProbeLib OvmfPkg/IntelTdx/IntelTdxX64.dsc | 3 +- OvmfPkg/Library/CcProbeLib/DxeCcProbeLib.c | 68 +++++++++++++++++++ OvmfPkg/Library/CcProbeLib/DxeCcProbeLib.inf | 26 +++++++ .../{CcProbeLib.c => SecPeiCcProbeLib.c} | 0 .../{CcProbeLib.inf => SecPeiCcProbeLib.inf} | 8 +-- OvmfPkg/OvmfPkgX64.dsc | 5 +- 6 files changed, 104 insertions(+), 6 deletions(-) create mode 100644 OvmfPkg/Library/CcProbeLib/DxeCcProbeLib.c create mode 100644 OvmfPkg/Library/CcProbeLib/DxeCcProbeLib.inf rename OvmfPkg/Library/CcProbeLib/{CcProbeLib.c => SecPeiCcProbeLib.c} (100%) rename OvmfPkg/Library/CcProbeLib/{CcProbeLib.inf => SecPeiCcProbeLib.inf} (65%) -- 2.29.2.windows.2 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#92941): https://edk2.groups.io/g/devel/message/92941 Mute This Topic: https://groups.io/mt/93340305/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-