]> git.proxmox.com Git - mirror_edk2.git/commit
OvmfPkg: Update CcProbeLib to DxeCcProbeLib
authorMin M Xu <min.m.xu@intel.com>
Thu, 7 Jul 2022 02:51:20 +0000 (10:51 +0800)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Tue, 6 Sep 2022 06:03:45 +0000 (06:03 +0000)
commit1b1c58ab32c30d32ba7d037c0ea1da198c1b372b
treecd61b7b8df12f2f9837f8334457e9236b36339bf
parentc4bc1a9498f4e176cefaeba3211287b444a53882
OvmfPkg: Update CcProbeLib to DxeCcProbeLib

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 redesigned 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 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
varialbe. Global variable cannot be used in SEC/PEI and CcProbe is called
very frequently.

Cc: Gerd Hoffmann <kraxel@redhat.com>
Cc: Erdem Aktas <erdemaktas@google.com>
Cc: James Bottomley <jejb@linux.ibm.com>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Tom Lendacky <thomas.lendacky@amd.com>
Signed-off-by: Min Xu <min.m.xu@intel.com>
Acked-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>
OvmfPkg/IntelTdx/IntelTdxX64.dsc
OvmfPkg/Library/CcProbeLib/CcProbeLib.c [deleted file]
OvmfPkg/Library/CcProbeLib/CcProbeLib.inf [deleted file]
OvmfPkg/Library/CcProbeLib/DxeCcProbeLib.c [new file with mode: 0644]
OvmfPkg/Library/CcProbeLib/DxeCcProbeLib.inf [new file with mode: 0644]
OvmfPkg/OvmfPkgX64.dsc