linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: sathyanarayanan.kuppuswamy@linux.intel.com
To: linux-kernel@vger.kernel.org
Subject: [RFC v1 00/26] Add TDX Guest Support
Date: Fri,  5 Feb 2021 22:24:38 -0800	[thread overview]
Message-ID: <cover.1612563142.git.sathyanarayanan.kuppuswamy@linux.intel.com> (raw)
Message-ID: <20210206062438.HmTc3gL_a_oIpgp5mqD99avgtfyVgUTEcttn0CgdFeI@z> (raw)

From: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>

Hi All,

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

This RFC series has been reviewed by Dave Hansen.

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 (6):
  x86/cpufeatures: Add TDX Guest CPU feature
  x86/cpufeatures: Add is_tdx_guest() interface
  x86/tdx: Handle MWAIT, MONITOR and WBINVD
  ACPI: tables: Add multiprocessor wake-up support
  x86/topology: Disable CPU hotplug support for TDX platforms.
  x86/tdx: Introduce INTEL_TDX_GUEST config option

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/tdx.c           |  32 ++
 arch/x86/boot/compressed/tdx_io.S        |   9 +
 arch/x86/include/asm/apic.h              |   3 +
 arch/x86/include/asm/asm-prototypes.h    |   1 +
 arch/x86/include/asm/cpufeatures.h       |   1 +
 arch/x86/include/asm/idtentry.h          |   4 +
 arch/x86/include/asm/io.h                |  25 +-
 arch/x86/include/asm/irqflags.h          |  42 +-
 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               | 114 +++++
 arch/x86/kernel/Makefile                 |   1 +
 arch/x86/kernel/acpi/boot.c              |  56 +++
 arch/x86/kernel/apic/probe_32.c          |   8 +
 arch/x86/kernel/apic/probe_64.c          |   8 +
 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/tdx-kvm.c                | 116 +++++
 arch/x86/kernel/tdx.c                    | 560 +++++++++++++++++++++++
 arch/x86/kernel/tdx_io.S                 | 143 ++++++
 arch/x86/kernel/topology.c               |   3 +-
 arch/x86/kernel/traps.c                  |  73 ++-
 arch/x86/mm/Makefile                     |   2 +
 arch/x86/mm/ioremap.c                    |   8 +-
 arch/x86/mm/mem_encrypt.c                |  74 ---
 arch/x86/mm/mem_encrypt_common.c         |  83 ++++
 arch/x86/mm/mem_encrypt_identity.c       |   1 +
 arch/x86/mm/pat/set_memory.c             |  23 +-
 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                    |   9 +
 include/acpi/actbl2.h                    |  21 +-
 45 files changed, 1444 insertions(+), 157 deletions(-)
 create mode 100644 arch/x86/boot/compressed/tdx.c
 create mode 100644 arch/x86/boot/compressed/tdx_io.S
 create mode 100644 arch/x86/include/asm/tdx.h
 create mode 100644 arch/x86/kernel/tdx-kvm.c
 create mode 100644 arch/x86/kernel/tdx.c
 create mode 100644 arch/x86/kernel/tdx_io.S
 create mode 100644 arch/x86/mm/mem_encrypt_common.c

-- 
2.25.1


             reply	other threads:[~2021-02-06  6:27 UTC|newest]

Thread overview: 161+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-06  3:02 sathyanarayanan.kuppuswamy [this message]
2021-02-05 23:38 ` [RFC v1 00/26] Add TDX Guest Support Kuppuswamy Sathyanarayanan
2021-02-05 23:38 ` [RFC v1 01/26] x86/paravirt: Introduce CONFIG_PARAVIRT_XL Kuppuswamy Sathyanarayanan
2021-02-05 23:38 ` [RFC v1 02/26] x86/cpufeatures: Add TDX Guest CPU feature Kuppuswamy Sathyanarayanan
2021-02-05 23:38 ` [RFC v1 03/26] x86/cpufeatures: Add is_tdx_guest() interface Kuppuswamy Sathyanarayanan
2021-04-01 21:08   ` Dave Hansen
2021-04-01 21:15     ` Kuppuswamy, Sathyanarayanan
2021-04-01 21:19       ` Dave Hansen
2021-04-01 22:25         ` Kuppuswamy, Sathyanarayanan
2021-02-05 23:38 ` [RFC v1 04/26] x86/tdx: Get TD execution environment information via TDINFO Kuppuswamy Sathyanarayanan
2021-02-08 10:00   ` Peter Zijlstra
2021-02-08 19:10     ` Kuppuswamy, Sathyanarayanan
2021-02-05 23:38 ` [RFC v1 05/26] x86/traps: Add #VE support for TDX guest Kuppuswamy Sathyanarayanan
2021-02-08 10:20   ` Peter Zijlstra
2021-02-08 16:23     ` Andi Kleen
2021-02-08 16:33       ` Peter Zijlstra
2021-02-08 16:46         ` Sean Christopherson
2021-02-08 16:59           ` Peter Zijlstra
2021-02-08 19:05             ` Kuppuswamy, Sathyanarayanan
2021-02-08 16:46         ` Andi Kleen
2021-02-12 19:20   ` Dave Hansen
2021-02-12 19:47   ` Andy Lutomirski
2021-02-12 20:06     ` Sean Christopherson
2021-02-12 20:17       ` Dave Hansen
2021-02-12 20:37         ` Sean Christopherson
2021-02-12 20:46           ` Dave Hansen
2021-02-12 20:54             ` Sean Christopherson
2021-02-12 21:06               ` Dave Hansen
2021-02-12 21:37                 ` Sean Christopherson
2021-02-12 21:47                   ` Andy Lutomirski
2021-02-12 21:48                     ` Dave Hansen
2021-02-14 19:33                       ` Andi Kleen
2021-02-14 19:54                         ` Andy Lutomirski
2021-02-12 20:20       ` Andy Lutomirski
2021-02-12 20:44         ` Sean Christopherson
2021-02-05 23:38 ` [RFC v1 06/26] x86/tdx: Add HLT " Kuppuswamy Sathyanarayanan
2021-02-05 23:38 ` [RFC v1 07/26] x86/tdx: Wire up KVM hypercalls Kuppuswamy Sathyanarayanan
2021-02-05 23:38 ` [RFC v1 08/26] x86/tdx: Add MSR support for TDX guest Kuppuswamy Sathyanarayanan
2021-02-05 23:38 ` [RFC v1 09/26] x86/tdx: Handle CPUID via #VE Kuppuswamy Sathyanarayanan
2021-02-05 23:42   ` Andy Lutomirski
2021-02-07 14:13     ` Kirill A. Shutemov
2021-02-07 16:01       ` Dave Hansen
2021-02-07 20:29         ` Kirill A. Shutemov
2021-02-07 22:31           ` Dave Hansen
2021-02-07 22:45             ` Andy Lutomirski
2021-02-08 17:10               ` Sean Christopherson
2021-02-08 17:35                 ` Andy Lutomirski
2021-02-08 17:47                   ` Sean Christopherson
2021-03-18 21:30               ` [PATCH v1 1/1] x86/tdx: Add tdcall() and tdvmcall() helper functions Kuppuswamy Sathyanarayanan
2021-03-19 16:55                 ` Sean Christopherson
2021-03-19 17:42                   ` Kuppuswamy, Sathyanarayanan
2021-03-19 18:22                     ` Dave Hansen
2021-03-19 19:58                       ` Kuppuswamy, Sathyanarayanan
2021-03-26 23:38                         ` [PATCH v2 1/1] x86/tdx: Add __tdcall() and __tdvmcall() " Kuppuswamy Sathyanarayanan
2021-04-20 17:36                           ` Dave Hansen
2021-04-20 19:20                             ` Kuppuswamy, Sathyanarayanan
2021-04-20 19:59                               ` Dave Hansen
2021-04-20 23:12                                 ` Kuppuswamy, Sathyanarayanan
2021-04-20 23:42                                   ` Dave Hansen
2021-04-23  1:09                                     ` Kuppuswamy, Sathyanarayanan
2021-04-23  1:21                                       ` Dave Hansen
2021-04-23  1:35                                         ` Andi Kleen
2021-04-23 15:15                                           ` Sean Christopherson
2021-04-23 15:28                                             ` Dan Williams
2021-04-23 15:38                                               ` Andi Kleen
2021-04-23 15:50                                               ` Sean Christopherson
2021-04-23 15:47                                             ` Andi Kleen
2021-04-23 18:18                                             ` Kuppuswamy, Sathyanarayanan
2021-04-20 23:53                                   ` Dan Williams
2021-04-20 23:59                                     ` Kuppuswamy, Sathyanarayanan
2021-02-05 23:38 ` [RFC v1 10/26] x86/io: Allow to override inX() and outX() implementation Kuppuswamy Sathyanarayanan
2021-02-05 23:38 ` [RFC v1 11/26] x86/tdx: Handle port I/O Kuppuswamy Sathyanarayanan
2021-02-05 23:38 ` [RFC v1 12/26] x86/tdx: Handle in-kernel MMIO Kuppuswamy Sathyanarayanan
2021-04-01 19:56   ` Dave Hansen
2021-04-01 22:26     ` Sean Christopherson
2021-04-01 22:53       ` Dave Hansen
2021-02-05 23:38 ` [RFC v1 13/26] x86/tdx: Handle MWAIT, MONITOR and WBINVD Kuppuswamy Sathyanarayanan
2021-02-05 23:43   ` Andy Lutomirski
2021-02-05 23:54     ` Kuppuswamy, Sathyanarayanan
2021-02-06  1:05       ` Andy Lutomirski
2021-03-27  0:18         ` [PATCH v1 1/1] " Kuppuswamy Sathyanarayanan
2021-03-27  2:40           ` Andy Lutomirski
2021-03-27  3:40             ` Kuppuswamy, Sathyanarayanan
2021-03-27 16:03               ` Andy Lutomirski
2021-03-27 22:54                 ` [PATCH v2 " Kuppuswamy Sathyanarayanan
2021-03-29 17:14                   ` Dave Hansen
2021-03-29 21:55                     ` Kuppuswamy, Sathyanarayanan
2021-03-29 22:02                       ` Dave Hansen
2021-03-29 22:09                         ` Kuppuswamy, Sathyanarayanan
2021-03-29 22:12                           ` Dave Hansen
2021-03-29 22:42                             ` Kuppuswamy, Sathyanarayanan
2021-03-29 23:16                             ` [PATCH v3 " Kuppuswamy Sathyanarayanan
2021-03-29 23:23                               ` Andy Lutomirski
2021-03-29 23:37                                 ` Kuppuswamy, Sathyanarayanan
2021-03-29 23:42                                   ` Sean Christopherson
2021-03-29 23:58                                     ` Andy Lutomirski
2021-03-30  2:04                                       ` Andi Kleen
2021-03-30  2:58                                         ` Andy Lutomirski
2021-03-30 15:14                                           ` Sean Christopherson
2021-03-30 16:37                                             ` Andy Lutomirski
2021-03-30 16:57                                               ` Sean Christopherson
2021-04-07 15:24                                                 ` Andi Kleen
2021-03-31 21:09                                           ` [PATCH v4 " Kuppuswamy Sathyanarayanan
2021-03-31 21:49                                             ` Dave Hansen
2021-03-31 22:29                                               ` Kuppuswamy, Sathyanarayanan
2021-03-31 21:53                                             ` Sean Christopherson
2021-03-31 22:00                                               ` Dave Hansen
2021-03-31 22:06                                                 ` Sean Christopherson
2021-03-31 22:11                                                   ` Dave Hansen
2021-03-31 22:28                                                     ` Kuppuswamy, Sathyanarayanan
2021-03-31 22:32                                                       ` Sean Christopherson
2021-03-31 22:34                                                       ` Dave Hansen
2021-04-01  3:28                                                         ` Andi Kleen
2021-04-01  3:46                                                           ` Dave Hansen
2021-04-01  4:24                                                             ` Andi Kleen
2021-04-01  4:51                                                               ` [PATCH v5 " Kuppuswamy Sathyanarayanan
2021-03-29 23:39                                 ` [PATCH v3 " Sean Christopherson
2021-03-29 23:38                               ` Dave Hansen
2021-03-30  4:56           ` [PATCH v1 " Xiaoyao Li
2021-03-30 15:00             ` Andi Kleen
2021-03-30 15:10               ` Dave Hansen
2021-03-30 17:02                 ` Kuppuswamy, Sathyanarayanan
2021-02-05 23:38 ` [RFC v1 14/26] ACPI: tables: Add multiprocessor wake-up support Kuppuswamy Sathyanarayanan
2021-02-05 23:38 ` [RFC v1 15/26] x86/boot: Add a trampoline for APs booting in 64-bit mode Kuppuswamy Sathyanarayanan
2021-02-05 23:38 ` [RFC v1 16/26] x86/boot: Avoid #VE during compressed boot for TDX platforms Kuppuswamy Sathyanarayanan
2021-02-05 23:38 ` [RFC v1 17/26] x86/boot: Avoid unnecessary #VE during boot process Kuppuswamy Sathyanarayanan
2021-02-05 23:38 ` [RFC v1 18/26] x86/topology: Disable CPU hotplug support for TDX platforms Kuppuswamy Sathyanarayanan
2021-02-05 23:38 ` [RFC v1 19/26] x86/tdx: Forcefully disable legacy PIC for TDX guests Kuppuswamy Sathyanarayanan
2021-02-05 23:38 ` [RFC v1 20/26] x86/tdx: Introduce INTEL_TDX_GUEST config option Kuppuswamy Sathyanarayanan
2021-02-05 23:38 ` [RFC v1 21/26] x86/mm: Move force_dma_unencrypted() to common code Kuppuswamy Sathyanarayanan
2021-04-01 20:06   ` Dave Hansen
2021-04-06 15:37     ` Kirill A. Shutemov
2021-04-06 16:11       ` Dave Hansen
2021-04-06 16:37         ` Kirill A. Shutemov
2021-02-05 23:38 ` [RFC v1 22/26] x86/tdx: Exclude Shared bit from __PHYSICAL_MASK Kuppuswamy Sathyanarayanan
2021-04-01 20:13   ` Dave Hansen
2021-04-06 15:54     ` Kirill A. Shutemov
2021-04-06 16:12       ` Dave Hansen
2021-02-05 23:38 ` [RFC v1 23/26] x86/tdx: Make pages shared in ioremap() Kuppuswamy Sathyanarayanan
2021-04-01 20:26   ` Dave Hansen
2021-04-06 16:00     ` Kirill A. Shutemov
2021-04-06 16:14       ` Dave Hansen
2021-02-05 23:38 ` [RFC v1 24/26] x86/tdx: Add helper to do MapGPA TDVMALL Kuppuswamy Sathyanarayanan
2021-02-05 23:38 ` [RFC v1 25/26] x86/tdx: Make DMA pages shared Kuppuswamy Sathyanarayanan
2021-04-01 21:01   ` Dave Hansen
2021-04-06 16:31     ` Kirill A. Shutemov
2021-04-06 16:38       ` Dave Hansen
2021-04-06 17:16         ` Sean Christopherson
2021-02-05 23:38 ` [RFC v1 26/26] x86/kvm: Use bounce buffers for TD guest Kuppuswamy Sathyanarayanan
2021-04-01 21:17   ` Dave Hansen
2021-02-06  3:04 ` Test Email sathyanarayanan.kuppuswamy
2021-02-06  6:24 ` [RFC v1 00/26] Add TDX Guest Support sathyanarayanan.kuppuswamy
2021-03-31 21:38 ` Kuppuswamy, Sathyanarayanan
2021-04-02  0:02 ` Dave Hansen
2021-04-02  2:48   ` Andi Kleen
2021-04-02 15:27     ` Dave Hansen
2021-04-02 21:32       ` Andi Kleen
2021-04-03 16:26         ` Dave Hansen
2021-04-03 17:28           ` Andi Kleen
2021-04-04 15:02 ` Dave Hansen
2021-04-12 17:24   ` Dan Williams

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=cover.1612563142.git.sathyanarayanan.kuppuswamy@linux.intel.com \
    --to=sathyanarayanan.kuppuswamy@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).