linux-doc.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH hyperv-next v3 00/15] Confidential VMBus
@ 2025-06-04  0:43 Roman Kisel
  2025-06-04  0:43 ` [PATCH hyperv-next v3 01/15] Documentation: hyperv: " Roman Kisel
                   ` (15 more replies)
  0 siblings, 16 replies; 36+ messages in thread
From: Roman Kisel @ 2025-06-04  0:43 UTC (permalink / raw)
  To: alok.a.tiwari, arnd, bp, corbet, dave.hansen, decui, haiyangz,
	hpa, kys, mingo, mhklinux, tglx, wei.liu, linux-arch, linux-doc,
	linux-hyperv, linux-kernel, x86
  Cc: apais, benhill, bperkins, sunilmut

The guests running on Hyper-V can be confidential where the memory and the
register content are encrypted, provided that the hardware supports that
(currently support AMD SEV-SNP and Intel TDX is implemented) and the guest
is capable of using these features. The confidential guests cannot be
introspected by the host nor the hypervisor without the guest sharing the
memory contents upon doing which the memory is decrypted.

In the confidential guests, neither the host nor the hypervisor need to be
trusted, and the guests processing sensitive data can take advantage of that.

Not trusting the host and the hypervisor (removing them from the Trusted
Computing Base aka TCB) ncessitates that the method of communication
between the host and the guest be changed. Below there is the breakdown of
the options used in the both cases (in the diagrams below the server is
marked as S, the client is marked as C):

1. Without the paravisoor the devices are connected to the host, and the
host provides the device emulation or translation to the guest:

+---- GUEST ----+       +----- DEVICE ----+        +----- HOST -----+
|               |       |                 |        |                |
|               |       |                 |        |                |
|               |       |                 ==========                |
|               |       |                 |        |                |
|               |       |                 |        |                |
|               |       |                 |        |                |
+----- C -------+       +-----------------+        +------- S ------+
       ||                                                   ||
       ||                                                   ||
+------||------------------ VMBus --------------------------||------+
|                     Interrupts, MMIO                              |
+-------------------------------------------------------------------+

2. With the paravisor, the devices are connected to the paravisor, and
the paravisor provides the device emulation or translation to the guest.
The guest doesn't communicate with the host directly, and the guest
communicates with the paravisor via the VMBus. The host is not trusted
in this model, and the paravisor is trusted:

+---- GUEST --------------- VTL0 ------+               +-- DEVICE --+
|                                      |               |            |
| +- PARAVISOR --------- VTL2 -----+   |               |            |
| |     +-- VMBus Relay ------+    ====+================            |
| |     |   Interrupts, MMIO  |    |   |               |            |
| |     +-------- S ----------+    |   |               +------------+
| |               ||               |   |
| +---------+     ||               |   |
| |  Linux  |     ||    OpenHCL    |   |
| |  kernel |     ||               |   |
| +---- C --+-----||---------------+   |
|       ||        ||                   |
+-------++------- C -------------------+               +------------+
        ||                                             |    HOST    |
        ||                                             +---- S -----+
+-------||----------------- VMBus ---------------------------||-----+
|                     Interrupts, MMIO                              |
+-------------------------------------------------------------------+

Note that in the second case the guest doesn't need to share the memory
with the host as it communicates only with the paravisor within their
partition boundary. That is precisely the raison d'etre and the value
proposition of this patch series: equip the confidential guest to use
private (encrypted) memory and rely on the paravisor when this is
available to be more secure.

An implementation of the VMBus relay that offers the Confidential VMBus channels
is available in the OpenVMM project as a part of the OpenHCL paravisor. Please
refer to https://openvmm.dev/ and https://github.com/microsoft/openvmm for more
information about the OpenHCL paravisor.

I'd like to thank the following people for their help with this
patch series:

* Dexuan for help with validation and the fruitful discussions,
* Easwar for reviewing the refactoring of the page allocating and
  freeing in `hv.c`,
* John and Sven for the design,
* Mike for helping to avoid pitfalls when dealing with the GFP flags,
* Sven for blazing the trail and implementing the design in few
  codebases.

I made sure to validate the patch series on

    {TrustedLaunch(x86_64), OpenHCL} x
    {SNP(x86_64), TDX(x86_64), No hardware isolation, No paravisor} x
    {VMBus 5.0, VMBus 6.0} x
    {arm64, x86_64}.

[V3]
    - The patch series is rebased on top of the latest hyperv-next branch.
    - Reworked the "wiring" diagram in the cover letter, added links to the
      OpenVMM project and the OpenHCL paravisor.

    - More precise wording in the comments and clearer code.
    **Thank you, Alok!**

    - Reworked the documentation patch.
    - Split the patchset into much more granular patches.
    - Various fixes and improvements throughout the patch series.
    **Thank you, Michael!**

[V2] https://lore.kernel.org/linux-hyperv/20250511230758.160674-1-romank@linux.microsoft.com/
    - The patch series is rebased on top of the latest hyperv-next branch.
  
    - Better wording in the commit messages and the Documentation.
    **Thank you, Alok and Wei!**

    - Removed the patches 5 and 6 concerning turning bounce buffering off from
      the previous version of the patch series as they were found to be
      architecturally unsound. The value proposition of the patch series is not
      diminished by this removal: these patches were an optimization and only for
      the storage (for the simplicity sake) but not for the network. These changes
      might be proposed in the future again after revolving the issues.
    ** Thanks you, Christoph, Dexuan, Dan, Michael, James, Robin! **

[V1] https://lore.kernel.org/linux-hyperv/20250409000835.285105-1-romank@linux.microsoft.com/

Roman Kisel (15):
  Documentation: hyperv: Confidential VMBus
  drivers: hv: VMBus protocol version 6.0
  arch: hyperv: Get/set SynIC synth.registers via paravisor
  arch/x86: mshyperv: Trap on access for some synthetic MSRs
  Drivers: hv: Rename fields for SynIC message and event pages
  Drivers: hv: Allocate the paravisor SynIC pages when required
  Drivers: hv: Post messages via the confidential VMBus if available
  Drivers: hv: remove stale comment
  Drivers: hv: Use memunmap() to check if the address is in IO map
  Drivers: hv: Rename the SynIC enable and disable routines
  Drivers: hv: Functions for setting up and tearing down the paravisor
    SynIC
  Drivers: hv: Allocate encrypted buffers when requested
  Drivers: hv: Support confidential VMBus channels
  Drivers: hv: Support establishing the confidential VMBus connection
  Drivers: hv: Set the default VMBus version to 6.0

 Documentation/virt/hyperv/coco.rst | 125 ++++++++-
 arch/x86/kernel/cpu/mshyperv.c     |  67 ++++-
 drivers/hv/channel.c               |  43 ++--
 drivers/hv/channel_mgmt.c          |  27 +-
 drivers/hv/connection.c            |   6 +-
 drivers/hv/hv.c                    | 399 ++++++++++++++++++++---------
 drivers/hv/hv_common.c             |  13 +
 drivers/hv/hyperv_vmbus.h          |  28 +-
 drivers/hv/mshv_root.h             |   2 +-
 drivers/hv/mshv_synic.c            |   6 +-
 drivers/hv/ring_buffer.c           |   5 +-
 drivers/hv/vmbus_drv.c             | 187 +++++++++-----
 include/asm-generic/mshyperv.h     |   3 +
 include/linux/hyperv.h             |  69 +++--
 14 files changed, 740 insertions(+), 240 deletions(-)


base-commit: 96959283a58d91ae20d025546f00e16f0a555208
-- 
2.43.0


^ permalink raw reply	[flat|nested] 36+ messages in thread

end of thread, other threads:[~2025-06-18 16:19 UTC | newest]

Thread overview: 36+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-06-04  0:43 [PATCH hyperv-next v3 00/15] Confidential VMBus Roman Kisel
2025-06-04  0:43 ` [PATCH hyperv-next v3 01/15] Documentation: hyperv: " Roman Kisel
2025-06-04  2:56   ` Randy Dunlap
2025-06-04 12:53   ` Jonathan Corbet
2025-06-04 13:20   ` ALOK TIWARI
2025-06-18 16:17   ` Michael Kelley
2025-06-04  0:43 ` [PATCH hyperv-next v3 02/15] drivers: hv: VMBus protocol version 6.0 Roman Kisel
2025-06-04  0:43 ` [PATCH hyperv-next v3 03/15] arch: hyperv: Get/set SynIC synth.registers via paravisor Roman Kisel
2025-06-04 13:27   ` ALOK TIWARI
2025-06-18 16:17   ` Michael Kelley
2025-06-04  0:43 ` [PATCH hyperv-next v3 04/15] arch/x86: mshyperv: Trap on access for some synthetic MSRs Roman Kisel
2025-06-04 13:38   ` ALOK TIWARI
2025-06-18 16:18   ` Michael Kelley
2025-06-04  0:43 ` [PATCH hyperv-next v3 05/15] Drivers: hv: Rename fields for SynIC message and event pages Roman Kisel
2025-06-18 16:18   ` Michael Kelley
2025-06-04  0:43 ` [PATCH hyperv-next v3 06/15] Drivers: hv: Allocate the paravisor SynIC pages when required Roman Kisel
2025-06-18 16:18   ` Michael Kelley
2025-06-04  0:43 ` [PATCH hyperv-next v3 07/15] Drivers: hv: Post messages via the confidential VMBus if available Roman Kisel
2025-06-04 13:48   ` ALOK TIWARI
2025-06-18 16:18   ` Michael Kelley
2025-06-04  0:43 ` [PATCH hyperv-next v3 08/15] Drivers: hv: remove stale comment Roman Kisel
2025-06-04  0:43 ` [PATCH hyperv-next v3 09/15] Drivers: hv: Use memunmap() to check if the address is in IO map Roman Kisel
2025-06-18 16:18   ` Michael Kelley
2025-06-04  0:43 ` [PATCH hyperv-next v3 10/15] Drivers: hv: Rename the SynIC enable and disable routines Roman Kisel
2025-06-18 16:19   ` Michael Kelley
2025-06-04  0:43 ` [PATCH hyperv-next v3 11/15] Drivers: hv: Functions for setting up and tearing down the paravisor SynIC Roman Kisel
2025-06-18 16:19   ` Michael Kelley
2025-06-04  0:43 ` [PATCH hyperv-next v3 12/15] Drivers: hv: Allocate encrypted buffers when requested Roman Kisel
2025-06-18 16:19   ` Michael Kelley
2025-06-04  0:43 ` [PATCH hyperv-next v3 13/15] Drivers: hv: Support confidential VMBus channels Roman Kisel
2025-06-04 14:15   ` ALOK TIWARI
2025-06-18 16:19   ` Michael Kelley
2025-06-04  0:43 ` [PATCH hyperv-next v3 14/15] Drivers: hv: Support establishing the confidential VMBus connection Roman Kisel
2025-06-18 16:19   ` Michael Kelley
2025-06-04  0:43 ` [PATCH hyperv-next v3 15/15] Drivers: hv: Set the default VMBus version to 6.0 Roman Kisel
2025-06-18 16:13 ` [PATCH hyperv-next v3 00/15] Confidential VMBus Michael Kelley

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).