lkml.org 
[lkml]   [2021]   [May]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectRe: [RFC v2 00/32] Add TDX Guest Support
From
Date
Hi Peter/Andy,

On 4/26/21 11:01 AM, Kuppuswamy Sathyanarayanan wrote:
> Hi All,

Just a gentle ping. Please let me know your comments on this patch set.
I hope it addressed concerns raised by you in RFC v1.

>
> NOTE: This series is not ready for wide public review. It is being
> specifically posted so that Peter Z and other experts on the entry
> code can look for problems with the new exception handler (#VE).
> That's also why x86@ is not being spammed.
>
> Intel's Trust Domain Extensions (TDX) protect guest VMs from malicious
> hosts and some physical attacks. This series adds the bare-minimum
> support to run a TDX guest. The host-side support will be submitted
> separately. Also support for advanced TD guest features like attestation
> or debug-mode will be submitted separately. 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.
>
> In contrast to the SEV code in the kernel, TDX guest memory is integrity
> protected and isolated; the host is prevented from accessing guest
> memory (even ciphertext).
>
> 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, subset of CPUID leaves, etc.
> 3. By default memory is marked as private, and TD will selectively share it with
> VMM based on need.
> 4. Remote attestation is supported to enable a third party (either the owner of
> the workload or a user of the services provided by the workload) to establish
> that the workload is running on an Intel-TDX-enabled platform located within a
> TD prior to providing that workload data.
>
> 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:
> * Implemented tdcall() and tdvmcall() helper functions in assembly and renamed
> them as __tdcall() and __tdvmcall().
> * Added do_general_protection() helper function to re-use protection
> code between #GP exception and TDX #VE exception handlers.
> * Addressed syscall gap issue in #VE handler support (for details check
> the commit log in "x86/traps: Add #VE support for TDX guest").
> * Modified patch titled "x86/tdx: Handle port I/O" to re-use common
> tdvmcall() helper function.
> * Added error handling support to MADT CPU wakeup code.
> * Introduced enum tdx_map_type to identify SHARED vs PRIVATE memory type.
> * Enabled shared memory in IOAPIC driver.
> * Added BINUTILS version info for TDCALL.
> * Changed the TDVMCALL vendor id from 0 to "TDX.KVM".
> * Replaced WARN() with pr_warn_ratelimited() in __tdvmcall() wrappers.
> * Fixed commit log and code comments related review comments.
> * Renamed patch titled # "x86/topology: Disable CPU hotplug support for TDX
> platforms" to "x86/topology: Disable CPU online/offline control for
> TDX guest"
> * Rebased on top of v5.12 kernel.
>
>
> Erik Kaneda (1):
> ACPICA: ACPI 6.4: MADT: add Multiprocessor Wakeup Structure
>
> Isaku Yamahata (1):
> x86/tdx: ioapic: Add shared bit for IOAPIC base address
>
> Kirill A. Shutemov (16):
> x86/paravirt: Introduce CONFIG_PARAVIRT_XL
> 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
> x86/io: Allow to override inX() and outX() implementation
> x86/tdx: Handle port I/O
> x86/tdx: Handle in-kernel MMIO
> x86/mm: Move force_dma_unencrypted() to common code
> x86/tdx: Exclude Shared bit from __PHYSICAL_MASK
> x86/tdx: Make pages shared in ioremap()
> x86/tdx: Add helper to do MapGPA TDVMALL
> x86/tdx: Make DMA pages shared
> x86/kvm: Use bounce buffers for TD guest
>
> Kuppuswamy Sathyanarayanan (10):
> x86/tdx: Introduce INTEL_TDX_GUEST config option
> x86/cpufeatures: Add TDX Guest CPU feature
> x86/x86: Add is_tdx_guest() interface
> x86/tdx: Add __tdcall() and __tdvmcall() helper functions
> x86/traps: Add do_general_protection() helper function
> x86/tdx: Handle MWAIT, MONITOR and WBINVD
> ACPICA: ACPI 6.4: MADT: add Multiprocessor Wakeup Mailbox Structure
> ACPI/table: Print MADT Wake table information
> x86/acpi, x86/boot: Add multiprocessor wake-up support
> x86/topology: Disable CPU online/offline control for TDX guest
>
> Sean Christopherson (4):
> x86/boot: Add a trampoline for APs booting in 64-bit mode
> x86/boot: Avoid #VE during compressed boot for TDX platforms
> x86/boot: Avoid unnecessary #VE during boot process
> x86/tdx: Forcefully disable legacy PIC for TDX guests
>
> arch/x86/Kconfig | 28 +-
> arch/x86/boot/compressed/Makefile | 2 +
> arch/x86/boot/compressed/head_64.S | 10 +-
> arch/x86/boot/compressed/misc.h | 1 +
> arch/x86/boot/compressed/pgtable.h | 2 +-
> arch/x86/boot/compressed/tdcall.S | 9 +
> arch/x86/boot/compressed/tdx.c | 32 ++
> arch/x86/include/asm/apic.h | 3 +
> arch/x86/include/asm/cpufeatures.h | 1 +
> arch/x86/include/asm/idtentry.h | 4 +
> arch/x86/include/asm/io.h | 24 +-
> arch/x86/include/asm/irqflags.h | 38 +-
> arch/x86/include/asm/kvm_para.h | 21 +
> arch/x86/include/asm/paravirt.h | 22 +-
> arch/x86/include/asm/paravirt_types.h | 3 +-
> arch/x86/include/asm/pgtable.h | 3 +
> arch/x86/include/asm/realmode.h | 1 +
> arch/x86/include/asm/tdx.h | 176 +++++++++
> arch/x86/kernel/Makefile | 1 +
> arch/x86/kernel/acpi/boot.c | 79 ++++
> arch/x86/kernel/apic/apic.c | 8 +
> arch/x86/kernel/apic/io_apic.c | 12 +-
> arch/x86/kernel/asm-offsets.c | 22 ++
> arch/x86/kernel/head64.c | 3 +
> arch/x86/kernel/head_64.S | 13 +-
> arch/x86/kernel/idt.c | 6 +
> arch/x86/kernel/paravirt.c | 4 +-
> arch/x86/kernel/pci-swiotlb.c | 2 +-
> arch/x86/kernel/smpboot.c | 5 +
> arch/x86/kernel/tdcall.S | 361 +++++++++++++++++
> arch/x86/kernel/tdx-kvm.c | 45 +++
> arch/x86/kernel/tdx.c | 480 +++++++++++++++++++++++
> arch/x86/kernel/topology.c | 3 +-
> arch/x86/kernel/traps.c | 81 ++--
> arch/x86/mm/Makefile | 2 +
> arch/x86/mm/ioremap.c | 8 +-
> arch/x86/mm/mem_encrypt.c | 75 ----
> arch/x86/mm/mem_encrypt_common.c | 85 ++++
> arch/x86/mm/mem_encrypt_identity.c | 1 +
> arch/x86/mm/pat/set_memory.c | 48 ++-
> arch/x86/realmode/rm/header.S | 1 +
> arch/x86/realmode/rm/trampoline_64.S | 49 ++-
> arch/x86/realmode/rm/trampoline_common.S | 5 +-
> drivers/acpi/tables.c | 11 +
> include/acpi/actbl2.h | 26 +-
> 45 files changed, 1654 insertions(+), 162 deletions(-)
> create mode 100644 arch/x86/boot/compressed/tdcall.S
> create mode 100644 arch/x86/boot/compressed/tdx.c
> create mode 100644 arch/x86/include/asm/tdx.h
> create mode 100644 arch/x86/kernel/tdcall.S
> create mode 100644 arch/x86/kernel/tdx-kvm.c
> create mode 100644 arch/x86/kernel/tdx.c
> create mode 100644 arch/x86/mm/mem_encrypt_common.c
>

--
Sathyanarayanan Kuppuswamy
Linux Kernel Developer

\
 
 \ /
  Last update: 2021-05-04 01:22    [W:0.804 / U:0.028 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site