audk/OvmfPkg/IntelTdx
Min M Xu a89f558d3c OvmfPkg/UefiCpuPkg/UefiPayloadPkg: Rename VmgExitLib to CcExitLib
BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=4123

VmgExitLib once was designed to provide interfaces to support #VC handler
and issue VMGEXIT instruction. After TDVF (enable TDX feature in OVMF) is
introduced, this library is updated to support #VE as well. Now the name
of VmgExitLib cannot reflect what the lib does.

This patch renames VmgExitLib to CcExitLib (Cc means Confidential
Computing). This is a simple renaming and there is no logic changes.
After renaming all the VmgExitLib related codes are updated with
CcExitLib. These changes are in OvmfPkg/UefiCpuPkg/UefiPayloadPkg.

Cc: Guo Dong <guo.dong@intel.com>
Cc: Sean Rhodes <sean@starlabs.systems>
Cc: James Lu <james.lu@intel.com>
Cc: Gua Guo <gua.guo@intel.com>
Cc: Eric Dong <eric.dong@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
Cc: Brijesh Singh <brijesh.singh@amd.com>
Cc: Erdem Aktas <erdemaktas@google.com>
Cc: Gerd Hoffmann <kraxel@redhat.com>
Cc: James Bottomley <jejb@linux.ibm.com>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Tom Lendacky <thomas.lendacky@amd.com>
Reviewed-by: James Lu <james.lu@intel.com>
Reviewed-by: Gua Guo <gua.guo@intel.com>
Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>
Reviewed-by: Ray Ni <ray.ni@intel.com>
Signed-off-by: Min Xu <min.m.xu@intel.com>
2022-11-14 04:55:34 +00:00
..
PrePiHobListPointerLibTdx OvmfPkg: Use PcdOvmfWorkAreaBase instead of PcdSevEsWorkAreaBase 2022-06-16 08:08:19 +00:00
Sec OvmfPkg: Call CcProbe in SecMain.c instead of TsIsEnabled 2022-04-19 01:26:08 +00:00
TdTcg2Dxe OvmfPkg/IntelTdx: Add TdTcg2Dxe 2022-06-03 11:41:36 +00:00
IntelTdxX64.dsc OvmfPkg/UefiCpuPkg/UefiPayloadPkg: Rename VmgExitLib to CcExitLib 2022-11-14 04:55:34 +00:00
IntelTdxX64.fdf OvmfPkg/IntelTdx: Enable RTMR based measurement and measure boot 2022-06-03 11:41:36 +00:00
README OvmfPkg: Add README for TDVF 2022-05-06 08:48:02 +00:00

README

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

TDVF Overview
-------------

<b>Intel Trust Domain Extension (TDX)</b> is Intel Architecture extension
to provide trusted, isolated VM execution by removing CSP software
(hypervisor etc) from the TCB. <b>TDX Virtual Firmware (TDVF)</b> is an
EDK II based project to enable UEFI support for TDX based Virtual
Machines. It provides the capability to launch a TD.

The <b>Intel? TDX Virtual Firmware Design Guide</b> is at
https://www.intel.com/content/dam/develop/external/us/en/documents/tdx-virtual-firmware-design-guide-rev-1.01.pdf.

More information can be found at:
https://www.intel.com/content/www/us/en/developer/articles/technical/intel-trust-domain-extensions.html


Configurations and Features
----------------------------

There are 2 configurations for TDVF.

<b>Config-A:</b>
 - Merge the *basic* TDVF feature to existing OvmfX64Pkg.dsc. (Align
   with existing SEV)
 - Threat model: VMM is NOT out of TCB. (We don?t make things worse)
 - The OvmfX64Pkg.dsc includes SEV/TDX/normal OVMF basic boot capability.
   The final binary can run on SEV/TDX/normal OVMF.
 - No changes to existing OvmfPkgX64 image layout.
 - No need to add additional security features if they do not exist today.
 - No need to remove features if they exist today.
 - RTMR is not supported.
 - PEI phase is NOT skipped in either Td or Non-Td.

<b>Config-B:</b>
 - (*) Add a standalone IntelTdx.dsc to a TDX specific directory for a *full*
   feature TDVF.(Align with existing SEV)
 - (*) Threat model: VMM is out of TCB. (We need necessary change to prevent
   attack from VMM)
 - (*) IntelTdx.dsc includes TDX/normal OVMF basic boot capability. The final
   binary can run on TDX/normal OVMF.
 - It might eventually merge with AmdSev.dsc, but NOT at this point of
   time. And we don?t know when it will happen. We need sync with AMD in
   the community after both of us think the solutions are mature to merge.
 - Need to add necessary security feature as mandatory requirement, such
   as RTMR based Trusted Boot support.
 - Need to measure the external input from Host VMM, such as TdHob, CFV.
 - Need to measure other external input, such as FW_CFG data, os loader,
   initrd, etc.
 - Need to remove unnecessary attack surfaces, such as network stack.

In current stage, <b>Config-A</b> has been merged into edk2-master branch.
The corresponding pkg file is OvmfPkg/OvmfPkgX64.dsc.

<b>Config-B</b> is split into several waves. The corresponding pkg file is
OvmfPkg/IntelTdx/IntelTdxX64.dsc. The features with (*) have been implemented
and merged into edk2-master branch. Others are in upstreaming progress.

Build
------
- Build the TDVF (Config-A) target:
`cd /path/to/edk2`
`source edksetup.sh`
`build.sh -p OvmfPkg/OvmfPkgX64.dsc -a X64 -t GCC5`

- Build the TDVF (Config-B) target:
`cd /path/to/edk2`
`set PACKAGES_PATH=/path/to/edk2/OvmfPkg`
`source edksetup.sh`
`build.sh -p OvmfPkg/IntelTdx/IntelTdxX64.dsc -a X64 -t GCC5`

Usage
-----

Assuming TDX-QEMU/TDX-KVM are already built, one can start a TD virtual
machine as [launching-td-guest](https://github.com/intel/qemu-tdx/blob/tdx-qemu-upstream-rfc-v3/docs/system/i386/tdx.rst#launching-a-td-tdx-vm):

`qemu_system_x86 \`
`   -machine ...,confidential-guest-support=tdx0 \`
`   -object tdx-guest,id=tdx0,[sept-ve-disable=off] \`
`   -drive if=pflash,format=raw,unit=0,file=/path/to/OVMF_CODE.fd \`
`   -drive if=pflash,format=raw,unit=1,file=/path/to/OVMF_VARS.fd \`

Note:
TDX-QEMU/TDX-KVM are still in upstreaming progress. Please refer to:
 - kvm  : https://github.com/intel/tdx/tree/kvm-upstream
 - qemu : https://github.com/intel/qemu-tdx/blob/tdx-qemu-upstream-rfc-v3

Once above 2 upstreaming are completed a minimum qemu/kvm version will be updated here.