Mailing List Archive

[PATCH v3 00/11] Add TDX Guest Support (Initial support)
Hi All,

Intel's Trust Domain Extensions (TDX) protect guest VMs from malicious
hosts and some physical attacks. This series adds the basic TDX guest
infrastructure support (including #VE handler support, and #VE support
for halt and CPUID). This is just a subset of patches in the bare minimum
TDX support patch list which is required for supporting minimal
functional TDX guest. Other basic feature features like #VE support for
IO, MMIO, boot optimization fixes and shared-mm support will be submitted
in a separate patch set. To make reviewing easier we split it into smaller
series. This series alone is not necessarily fully functional.

Also, the host-side support patches, and support for advanced TD guest
features like attestation or debug-mode will be submitted at a later time.
Also, at this point it is not secure with some known holes in drivers, and
also hasn’t been fully audited and fuzzed yet.

TDX has a lot of similarities to SEV. It enhances confidentiality and
of guest memory and state (like registers) and includes a new exception
(#VE) for the same basic reasons as SEV-ES. Like SEV-SNP (not merged
yet), TDX limits the host's ability to effect changes in the guest
physical address space. With TDX the host cannot access the guest memory,
so various functionality that would normally be done in KVM has moved
into a (paravirtualized) guest. Partially this is done using the
Virtualization Exception (#VE) and partially with direct paravirtual hooks.

The TDX architecture also includes a new CPU mode called
Secure-Arbitration Mode (SEAM). The software (TDX module) running in this
mode arbitrates interactions between host and guest and implements many of
the guarantees of the TDX architecture.

Some of the key differences between TD and regular VM is,

1. Multi CPU bring-up is done using the ACPI MADT wake-up table.
2. A new #VE exception handler is added. The TDX module injects #VE exception
   to the guest TD in cases of instructions that need to be emulated, disallowed
   MSR accesses, etc.
3. By default memory is marked as private, and TD will selectively share it with
   VMM based on need.
   
Note that the kernel will also need to be hardened against low level inputs from
the now untrusted hosts. This will be done in follow on patches.

You can find TDX related documents in the following link.

https://software.intel.com/content/www/br/pt/develop/articles/intel-trust-domain-extensions.html

Changes since v1 (v2 is partial set submission):
* Patch titled "x86/x86: Add early_is_tdx_guest() interface" is moved
out of this series.
* Rest of the change log is added per patch.

Kirill A. Shutemov (7):
x86/paravirt: Move halt paravirt calls under CONFIG_PARAVIRT
x86/tdx: Get TD execution environment information via TDINFO
x86/traps: Add #VE support for TDX guest
x86/tdx: Add HLT support for TDX guest
x86/tdx: Wire up KVM hypercalls
x86/tdx: Add MSR support for TDX guest
x86/tdx: Handle CPUID via #VE

Kuppuswamy Sathyanarayanan (4):
x86/tdx: Introduce INTEL_TDX_GUEST config option
x86/cpufeatures: Add TDX Guest CPU feature
x86: Introduce generic protected guest abstraction
x86/tdx: Add __tdx_module_call() and __tdx_hypercall() helper
functions

arch/Kconfig | 3 +
arch/x86/Kconfig | 22 ++
arch/x86/include/asm/cpufeatures.h | 1 +
arch/x86/include/asm/idtentry.h | 4 +
arch/x86/include/asm/irqflags.h | 40 ++--
arch/x86/include/asm/kvm_para.h | 22 ++
arch/x86/include/asm/paravirt.h | 20 +-
arch/x86/include/asm/paravirt_types.h | 3 +-
arch/x86/include/asm/protected_guest.h | 20 ++
arch/x86/include/asm/sev.h | 3 +
arch/x86/include/asm/tdx.h | 109 ++++++++++
arch/x86/kernel/Makefile | 1 +
arch/x86/kernel/asm-offsets.c | 23 ++
arch/x86/kernel/head64.c | 3 +
arch/x86/kernel/idt.c | 6 +
arch/x86/kernel/paravirt.c | 4 +-
arch/x86/kernel/sev.c | 17 ++
arch/x86/kernel/tdcall.S | 283 +++++++++++++++++++++++++
arch/x86/kernel/tdx.c | 246 +++++++++++++++++++++
arch/x86/kernel/traps.c | 69 ++++++
include/linux/protected_guest.h | 30 +++
21 files changed, 898 insertions(+), 31 deletions(-)
create mode 100644 arch/x86/include/asm/protected_guest.h
create mode 100644 arch/x86/include/asm/tdx.h
create mode 100644 arch/x86/kernel/tdcall.S
create mode 100644 arch/x86/kernel/tdx.c
create mode 100644 include/linux/protected_guest.h

--
2.25.1
Re: [PATCH v3 00/11] Add TDX Guest Support (Initial support) [ In reply to ]
Hi x86 maintainers,

On Fri, Jun 18, 2021 at 3:58 PM Kuppuswamy Sathyanarayanan
<sathyanarayanan.kuppuswamy@linux.intel.com> wrote:
>
> Hi All,
>
> Intel's Trust Domain Extensions (TDX) protect guest VMs from malicious
> hosts and some physical attacks. This series adds the basic TDX guest
> infrastructure support (including #VE handler support, and #VE support
> for halt and CPUID). This is just a subset of patches in the bare minimum
> TDX support patch list which is required for supporting minimal
> functional TDX guest. Other basic feature features like #VE support for
> IO, MMIO, boot optimization fixes and shared-mm support will be submitted
> in a separate patch set. To make reviewing easier we split it into smaller
> series. This series alone is not necessarily fully functional.
>
> Also, the host-side support patches, and support for advanced TD guest
> features like attestation or debug-mode will be submitted at a later time.
> Also, at this point it is not secure with some known holes in drivers, and
> also hasn’t been fully audited and fuzzed yet.
>
> TDX has a lot of similarities to SEV. It enhances confidentiality and
> of guest memory and state (like registers) and includes a new exception
> (#VE) for the same basic reasons as SEV-ES. Like SEV-SNP (not merged
> yet), TDX limits the host's ability to effect changes in the guest
> physical address space. With TDX the host cannot access the guest memory,
> so various functionality that would normally be done in KVM has moved
> into a (paravirtualized) guest. Partially this is done using the
> Virtualization Exception (#VE) and partially with direct paravirtual hooks.
>
> The TDX architecture also includes a new CPU mode called
> Secure-Arbitration Mode (SEAM). The software (TDX module) running in this
> mode arbitrates interactions between host and guest and implements many of
> the guarantees of the TDX architecture.
>
> Some of the key differences between TD and regular VM is,
>
> 1. Multi CPU bring-up is done using the ACPI MADT wake-up table.
> 2. A new #VE exception handler is added. The TDX module injects #VE exception
> to the guest TD in cases of instructions that need to be emulated, disallowed
> MSR accesses, etc.
> 3. By default memory is marked as private, and TD will selectively share it with
> VMM based on need.
>
> Note that the kernel will also need to be hardened against low level inputs from
> the now untrusted hosts. This will be done in follow on patches.
>
> You can find TDX related documents in the following link.
>
> https://software.intel.com/content/www/br/pt/develop/articles/intel-trust-domain-extensions.html
>
> Changes since v1 (v2 is partial set submission):
> * Patch titled "x86/x86: Add early_is_tdx_guest() interface" is moved
> out of this series.
> * Rest of the change log is added per patch.

I have submitted the following list of TDX patch series 2-3 weeks back, and so
far we only received feedback for a few patches in sets 1 and 4 (from Boris &
Tom Lendacky). So, I was curious if you were planning on taking a look at
other sets of patch series in this submission or were waiting for new
revisions? Please let me know your comments.

sets 1-4 are core sets of patches that add TDX guest support.
set 4+ adds extra TDX features support.

Add TDX Guest Support (Initial support) [set 1] (currently v3 version)
- https://lore.kernel.org/patchwork/project/lkml/list/?series=505232

Add TDX Guest Support (#VE handler support) [set 2] (currently v2 version)
- https://lore.kernel.org/patchwork/project/lkml/list/?series=506230

Add TDX Guest Support (boot fixes) [set 3] (currently v2 version)
- https://lore.kernel.org/patchwork/project/lkml/list/?series=506231

Add TDX Guest Support (shared-mm support) [set 4] (currently v2 version)
- https://lore.kernel.org/patchwork/project/lkml/list/?series=506232

Add TDX Guest Support (Debug support) [set 5] (currently v1 version)
- https://lore.kernel.org/patchwork/project/lkml/list/?series=506233

Add TDX Guest Support (Attestation support) [set 6] (currently v1 version)
- https://lore.kernel.org/patchwork/project/lkml/list/?series=506234


--
Sathyanarayanan Kuppuswamy
Linux Kernel Developer