From: "Roger Pau Monné" <roger.pau@citrix.com>
To: Teddy Astie <teddy.astie@vates.tech>
Cc: xen-devel@lists.xenproject.org,
Andrew Cooper <andrew.cooper3@citrix.com>,
Anthony PERARD <anthony.perard@vates.tech>,
Michal Orzel <michal.orzel@amd.com>,
Jan Beulich <jbeulich@suse.com>, Julien Grall <julien@xen.org>,
Stefano Stabellini <sstabellini@kernel.org>
Subject: Re: [RFC PATCH] pvh: Introduce SIF_HVM_GHCB for SEV-ES/SNP guests
Date: Fri, 9 Jan 2026 12:37:30 +0100 [thread overview]
Message-ID: <aWDoeuHWLQ04qdI0@Mac.lan> (raw)
In-Reply-To: <ca59701c-6c3e-4e9a-84b5-1a31037fa611@vates.tech>
On Fri, Jan 09, 2026 at 10:31:57AM +0000, Teddy Astie wrote:
> Le 09/01/2026 à 09:59, Roger Pau Monné a écrit :
> > On Thu, Jan 08, 2026 at 07:12:48PM +0000, Teddy Astie wrote:
> >> Le 08/01/2026 à 18:46, Roger Pau Monné a écrit :
> >>> On Thu, Jan 08, 2026 at 04:50:51PM +0000, Teddy Astie wrote:
> >>>> Le 28/12/2025 à 13:54, Teddy Astie a écrit :
> >>>>> Under SEV, the pagetables needs to be post-processed to add the C-bit
> >>>>> (to make the mapping encrypted). The guest is expected to query the C-bit
> >>>>> through CPUID. However, under SEV-ES and SEV-SNP modes, this instruction
> >>>>> now triggers #VC instead. The guest would need to setup a IDT very early
> >>>>> and instead use the early-GHCB protocol to emulate CPUID, which is
> >>>>> complicated.
> >>>
> >>> Possibly a stupid question, but how is this information expected to
> >>> be propagated to the guest when there's a guest firmware and
> >>> bootloader in use?
> >>>
> >>> How is OVMF and/or grub propagating this information between
> >>> themselves and to Linux?
> >>>
> >>
> >> When booting Linux with SEV+UEFI, at least during the UEFI services, the
> >> UEFI firmware transparently handles #VC for the rest to allow it to
> >> perform CPUID operation.
> >> (with SEV-SNP CPUID page exposed with a specific UEFI mecanism)
> >
> > Hm, that's going to be cumbersome when using hvmloader in this
> > scenario, as it makes extensive use of CPUID and hence would need to
> > setup it's own #VC handler ahead of making use of CPUID.
> >
> > Or we must instead get rid of hvmloader.
> >
>
> For plain SEV, hvmloader would need to run with paging (PAE or 4-level)
> to properly handle encryption bit. But would also need Xen to handle
> MMIO instructions (which has some quirks due to being in encrypted memory).
Does hvmloader really need encryption though? What sensitive data
does hvmloader deal with that would require encryption.
> For SEV-ES, #VC handler + GHCB is not only required for CPUID, but also
> for VMMCALL, MMIO, some MSR accesses, ...
>
> It would be easier to not use hvmloader, especially since only UEFI
> supports SEV and guests would still need to support (Xen-specific) SEV
> bits to begin with.
I would be very happy to relegate hvmloader to be used with SeaBIOS
only, and to load OVMF directly for HVM guests. But I don't know
what's missing for OVMF to be capable of that. I would think not
much, since it's already almost working for PVH guests AFAIK.
Maybe PCI enumeration, but OVMF must have a way of doing that already
for other platforms I expect.
> >> So overall, this proposal is only meaningful for PVH booting, everything
> >> that comes after can be handled differently.
> >>
> >>> Are they relying on the CPUID discovery logic mentioned above, or
> >>> there's some shadow infra used by KVM for example to already convey
> >>> it?
> >>>
> >>
> >> OVMF at its startup relies on #VC for emulating CPUID.
> >> It then relies on GHCB MSR for getting SEV info/C-bit (but only with
> >> SEV-ES). And under SEV-SNP, it uses "CPUID page" instead of GHCB
> >> (PAGE_TYPE_CPUID in SEV-SNP firmware ABI specification).
> >>
> >> This is because SEV/GHCB specification recommends using CPUID page under
> >> SEV-SNP (even though the same protocol as SEV-ES still works; but is
> >> discouraged).
> >
> > In a previous reply to Jan you mention that Linux already has such
> > handlers, but just for the decompressing code (and hence not reachable
> > from the PVH entry point, that's already decompressed code). Would it
> > be possible to share the handlers with the PVH entry point?
> >
>
> Maybe, Linux already does this for few parts of SEV code (e.g
> arch/x86/coco/sev/vc-shared.c being also included in
> arch/x86/boot/compressed/sev-handle-vc.c).
>
> Everything we would need appears to be contained in
> arch/x86/boot/compressed/mem_encrypt.S.
I don't know that much about Linux whether it would be easy for the
PVH entry point to re-use that code.
> >> In GHCB Version 2 (SEV-SNP)
> >>> The hypervisor may supply the encryption bit position using the SEV Information MSR protocol,
> >>> but the guest should use the CPUID information supplied in the CPUID Page to determine the
> >>> encryption bit position.
> >>
> >> But its location is unfortunately undefined in this specification and in
> >> the OVMF case, hardcoded in firmware metadata.
> >>
> >>> Adding Xen side-channels when there's an architectural defined way to
> >>> obtain the information is a duplication of interfaces, and could lead
> >>> to issues in the long run. We can not possibly be adding all vendor
> >>> SEV options to SIF_ flags just because they are cumbersome to fetch.
> >>> I know this is just one right now, but we don't know whether more of
> >>> those CPUID options would be needed at the start of day in the future.
> >>>
> >>
> >> That exists for SEV-ES and SEV-SNP (even though complicated) but for
> >> SEV-SNP, it would relies on discouraged mecanisms (GHCB CPUID Request).
> >>
> >> AFAIU, this flag is enough for setting up long mode and GHCB which is
> >> what matters. There are some additional structures (e.g secret page and
> >> CPUID page) which could in the future be eventually exposed as PVH
> >> modules; which would be hopefully less intrusive.
> >
> > If my understating is correct, this is not needed for the initial
> > implementation of SEV (when hypervisor doesn't implement ES or SNP
> > guests can use CPUID), and hence it might be best to wait for the
> > basic SEV implementation to be in the hypervisor before jumping into
> > ES or SNP details?
> >
>
> Correct; CPUID is handled normally when not running with SEV-ES/SNP.
>
> > AFAICT (from your Linux entry point patch) you end up needing both the
> > CPUID and the GHCB ways of detecting SEV support, so one doesn't
> > preclude the other.
> >
>
> Both are needed if we want to support both SEV-ES and no-ES cases; but
> if only SEV-ES+ is wanted, the CPUID path would never be taken with this
> approach.
Since in Xen we do want to support plain SEV (without ES extensions),
I would focus initially on the CPUID path, because it would be needed
anyway. Get that working on both Xen and Linux, and then discuss
about any ES/SNP ABI additions. It seems premature to do ABI changes
to accommodate ES/SNP support when not even plain SEV is supported.
Thanks, Roger.
next prev parent reply other threads:[~2026-01-09 11:37 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-28 12:49 [RFC PATCH] pvh: Introduce SIF_HVM_GHCB for SEV-ES/SNP guests Teddy Astie
2025-12-29 8:21 ` Jan Beulich
2025-12-29 12:39 ` Teddy Astie
2025-12-29 14:13 ` Jan Beulich
2026-01-05 13:50 ` Teddy Astie
2026-01-08 16:50 ` Teddy Astie
2026-01-08 17:44 ` Roger Pau Monné
2026-01-08 19:12 ` Teddy Astie
2026-01-09 8:57 ` Roger Pau Monné
2026-01-09 10:31 ` Teddy Astie
2026-01-09 11:37 ` Roger Pau Monné [this message]
2026-01-12 12:47 ` Anthony PERARD
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=aWDoeuHWLQ04qdI0@Mac.lan \
--to=roger.pau@citrix.com \
--cc=andrew.cooper3@citrix.com \
--cc=anthony.perard@vates.tech \
--cc=jbeulich@suse.com \
--cc=julien@xen.org \
--cc=michal.orzel@amd.com \
--cc=sstabellini@kernel.org \
--cc=teddy.astie@vates.tech \
--cc=xen-devel@lists.xenproject.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.