RE: [Patch v3 07/14] x86/hyperv: Change vTOM handling to use standard coco mechanisms

Michael Kelley (LINUX)
2022-11-28T18:13:41Z

From: Borislav Petkov <bp@alien8.de> Sent: Monday, November 28, 2022 9:25 AM
>
> On Mon, Nov 28, 2022 at 04:59:27PM +0000, Michael Kelley (LINUX) wrote:
> > 2) The Linux guest must set the vTOM flag in a PTE to access a page
> > as unencrypted.
>
> What exactly do you call the "vTOM flag in the PTE"?
>
> I see this here:
>
> "When bit 1 (vTOM) of SEV_FEATURES is set in the VMSA of an SNP-active
> VM, the VIRTUAL_TOM field is used to determine the C-bit for data
> accesses instead of the guest page table contents. All data accesses
> below VIRTUAL_TOM are accessed with an effective C-bit of 1 and all
> addresses at or above VIRTUAL_TOM are accessed with an effective C-bit
> of 0."
>
> Now you say
>
> "vTOM is the dividing line where the uppermost bit of the physical
> address space is set; e.g., with 47 bits of guest physical address
> space, vTOM is 0x40000000000 (bit 46 is set)."
>
> So on your guests, is VIRTUAL_TOM == 0x400000000000?
>
> Btw, that 0x4000.. does not have bit 46 set but bit 42. Bit 46 set is
>
> 0x400000000000
>
> which means one more '0' at the end.

Yeah, looks like I dropped a '0' in my comment text. Will fix.

>
> So before we discuss this further, let's agree on the basics first.
>
> > What Windows guests do isn't really relevant. Again, the code in this patch
> > series all runs directly in the Linux guest, not the paravisor. And the Linux
> > guest isn't unmodified. We've added changes to understand vTOM and
> > the need to communicate with the hypervisor about page changes
> > between private and shared. But there are other changes for a fully
> > enlightened guest that we don't have to make when using AMD vTOM,
> > because the paravisor transparently (to the guest -- Linux or Windows)
> > handles those issues.
>
> So this is some other type of guest you wanna run.
>
> Where is the documentation of that thing?
>
> I'd like to know what exactly it is going to use in the kernel.

Standard Linux is the guest. It's fully functional for running general
Purpose workloads that want "confidential computing" where guest
memory is encrypted and the data in the guest is not visible to the
host hypervisor. It's a standard Linux kernel. I'm not sure what you
mean by "some other type of guest".

>
> > Again, no. What I have proposed as CC_VENDOR_AMD_VTOM is
>
> There's no vendor AMD_VTOM!
>
> We did the vendor thing to denote Intel or AMD wrt to confidential
> computing.

But vendor AMD effectively offers two different encryption schemes that
could be seen by the guest VM. The hypervisor chooses which scheme a
particular guest will see. Hyper-V has chosen to present the vTOM scheme
to guest VMs, including normal Linux and Windows guests, that have been
modestly updated to understand vTOM.

>
> Now you're coming up with something special. It can't be HYPERV because
> Hyper-V does other types of confidential solutions too, apparently.

In the future, Hyper-V may also choose to present original AMD C-bit scheme
in some guest VMs, depending on the use case. And it will present the Intel
TDX scheme when running on that hardware.

>
> Now before this goes any further I'd like for "something special" to be
> defined properly and not just be a one-off Hyper-V thing.
>
> > specific to AMD's virtual-Top-of-Memory architecture. The TDX
> > architecture doesn't really have a way to use a paravisor.
> >
> > To summarize, the code in this patch series is about a 3rd encryption
> > scheme that is used by the guest.
>
> Yes, can that third thing be used by other hypervisors or is this
> Hyper-V special?

This third thing is part of the AMD SEV-SNP architecture and could be used
by any hypervisor.

>
> > It is completely parallel to the AMD C-bit encryption scheme and
> > the Intel TDX encryption scheme. With the AMD vTOM scheme, there is
> > a paravisor that transparently emulates some things for the guest
> > so there are fewer code changes needed in the guest, but this patch
> > series is not about that paravisor code.
>
> Would other hypervisors want to support such a scheme?
>
> Is this architecture documented somewhere? If so, where?

The AMD vTOM scheme is documented in the AMD SEV-SNP
architecture specs.

>
> What would it mean for the kernel to support it.

The Linux kernel running as a guest already supports it, at least when
running on Hyper-V. The code went into the 5.15 kernel [1][2] about
a year ago. But that code is more Hyper-V specific than is desirable.
This patch set makes the AMD vTOM support more parallel to the Intel
TDX and AMD C-bit support.

To my knowledge, KVM does not support the AMD vTOM scheme.
Someone from AMD may have a better sense whether adding that
support is likely in the future.

[1] https://lore.kernel.org/all/20211025122116.264793-1-ltykernel@gmail.com/
[2] https://lore.kernel.org/all/20211213071407.314309-1-ltykernel@gmail.com/

Michael