From: Roman Kisel <romank@linux.microsoft.com>
To: aleksander.lobakin@intel.com, andriy.shevchenko@linux.intel.com,
arnd@arndb.de, bp@alien8.de, catalin.marinas@arm.com,
corbet@lwn.net, dakr@kernel.org, dan.j.williams@intel.com,
dave.hansen@linux.intel.com, decui@microsoft.com,
gregkh@linuxfoundation.org, haiyangz@microsoft.com, hch@lst.de,
hpa@zytor.com, James.Bottomley@HansenPartnership.com,
Jonathan.Cameron@huawei.com, kys@microsoft.com, leon@kernel.org,
lukas@wunner.de, luto@kernel.org, m.szyprowski@samsung.com,
martin.petersen@oracle.com, mingo@redhat.com,
peterz@infradead.org, quic_zijuhu@quicinc.com,
robin.murphy@arm.com, tglx@linutronix.de, wei.liu@kernel.org,
will@kernel.org, iommu@lists.linux.dev,
linux-arch@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
linux-doc@vger.kernel.org, linux-hyperv@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-scsi@vger.kernel.org,
x86@kernel.org
Cc: apais@microsoft.com, benhill@microsoft.com,
bperkins@microsoft.com, sunilmut@microsoft.com
Subject: [PATCH hyperv-next 0/6] Confidential VMBus
Date: Tue, 8 Apr 2025 17:08:29 -0700 [thread overview]
Message-ID: <20250409000835.285105-1-romank@linux.microsoft.com> (raw)
Logically, there are two parts to this patch series:
1. The first part is to add the support for the confidential VMBus
protocol, patches 1-4.
2. The second part is to avoid the bounce-buffering when the pages
aren't shared with the host, patches 5-6.
Let us discuss the motivation and present the value proposition.
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 AMD SEV-SNP and Intel TDX) 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 ------+ +-- DEVICE --+
| | | |
| +- PARAVISOR -+ | | |
| | ==+==================================== |
| | OpenHCL | | | |
| | | C===================== | |
+-+---- C - S --+-+ || +------------+
|| || ||
|| || +-- VMBus Relay --||--+ +--- HOST ---+
|| ||======= Interrupts, MMIO | | |
|| +---------------------+ +---- 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 secure.
I'd like to thank the following people for their help with this
patch series:
- Dexuan for help with the patches 4-6, 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.
Roman Kisel (6):
Documentation: hyperv: Confidential VMBus
drivers: hyperv: VMBus protocol version 6.0
arch: hyperv: Get/set SynIC synth.registers via paravisor
arch: x86, drivers: hyperv: Enable confidential VMBus
arch, drivers: Add device struct bitfield to not bounce-buffer
drivers: SCSI: Do not bounce-bufffer for the confidential VMBus
Documentation/virt/hyperv/vmbus.rst | 41 +++
arch/arm64/hyperv/mshyperv.c | 19 ++
arch/arm64/include/asm/mshyperv.h | 3 +
arch/x86/include/asm/mshyperv.h | 3 +
arch/x86/kernel/cpu/mshyperv.c | 51 ++-
arch/x86/mm/mem_encrypt.c | 3 +
drivers/hv/channel.c | 36 ++-
drivers/hv/channel_mgmt.c | 29 +-
drivers/hv/connection.c | 10 +-
drivers/hv/hv.c | 485 ++++++++++++++++++++--------
drivers/hv/hyperv_vmbus.h | 9 +-
drivers/hv/ring_buffer.c | 5 +-
drivers/hv/vmbus_drv.c | 152 +++++----
drivers/scsi/storvsc_drv.c | 2 +
include/asm-generic/mshyperv.h | 1 +
include/linux/device.h | 8 +
include/linux/dma-direct.h | 3 +
include/linux/hyperv.h | 71 ++--
include/linux/swiotlb.h | 3 +
19 files changed, 696 insertions(+), 238 deletions(-)
base-commit: 628cc040b3a2980df6032766e8ef0688e981ab95
--
2.43.0
next reply other threads:[~2025-04-09 0:08 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-09 0:08 Roman Kisel [this message]
2025-04-09 0:08 ` [PATCH hyperv-next 1/6] Documentation: hyperv: Confidential VMBus Roman Kisel
2025-04-10 16:54 ` ALOK TIWARI
2025-04-10 19:10 ` Roman Kisel
2025-04-25 6:31 ` Wei Liu
2025-04-09 0:08 ` [PATCH hyperv-next 2/6] drivers: hyperv: VMBus protocol version 6.0 Roman Kisel
2025-04-10 17:03 ` ALOK TIWARI
2025-04-09 0:08 ` [PATCH hyperv-next 3/6] arch: hyperv: Get/set SynIC synth.registers via paravisor Roman Kisel
2025-04-09 0:08 ` [PATCH hyperv-next 4/6] arch: x86, drivers: hyperv: Enable confidential VMBus Roman Kisel
2025-04-09 0:08 ` [PATCH hyperv-next 5/6] arch, drivers: Add device struct bitfield to not bounce-buffer Roman Kisel
2025-04-09 10:52 ` Christoph Hellwig
2025-04-09 15:27 ` Roman Kisel
2025-04-09 16:03 ` Robin Murphy
2025-04-09 16:44 ` Roman Kisel
2025-04-09 23:30 ` Dan Williams
2025-04-10 1:16 ` Michael Kelley
2025-04-11 0:03 ` Dan Williams
2025-04-10 7:23 ` Christoph Hellwig
2025-04-10 23:44 ` Jason Gunthorpe
2025-04-10 23:50 ` Jason Gunthorpe
2025-04-10 7:21 ` Christoph Hellwig
2025-04-10 15:16 ` Roman Kisel
2025-04-09 0:08 ` [PATCH hyperv-next 6/6] drivers: SCSI: Do not bounce-bufffer for the confidential VMBus Roman Kisel
2025-04-09 10:53 ` Christoph Hellwig
2025-04-09 15:36 ` Roman Kisel
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=20250409000835.285105-1-romank@linux.microsoft.com \
--to=romank@linux.microsoft.com \
--cc=James.Bottomley@HansenPartnership.com \
--cc=Jonathan.Cameron@huawei.com \
--cc=aleksander.lobakin@intel.com \
--cc=andriy.shevchenko@linux.intel.com \
--cc=apais@microsoft.com \
--cc=arnd@arndb.de \
--cc=benhill@microsoft.com \
--cc=bp@alien8.de \
--cc=bperkins@microsoft.com \
--cc=catalin.marinas@arm.com \
--cc=corbet@lwn.net \
--cc=dakr@kernel.org \
--cc=dan.j.williams@intel.com \
--cc=dave.hansen@linux.intel.com \
--cc=decui@microsoft.com \
--cc=gregkh@linuxfoundation.org \
--cc=haiyangz@microsoft.com \
--cc=hch@lst.de \
--cc=hpa@zytor.com \
--cc=iommu@lists.linux.dev \
--cc=kys@microsoft.com \
--cc=leon@kernel.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-hyperv@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=lukas@wunner.de \
--cc=luto@kernel.org \
--cc=m.szyprowski@samsung.com \
--cc=martin.petersen@oracle.com \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=quic_zijuhu@quicinc.com \
--cc=robin.murphy@arm.com \
--cc=sunilmut@microsoft.com \
--cc=tglx@linutronix.de \
--cc=wei.liu@kernel.org \
--cc=will@kernel.org \
--cc=x86@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).