mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Sean Christopherson <seanjc@google.com>
To: Michael Roth <michael.roth@amd.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
	Tom Lendacky <thomas.lendacky@amd.com>,
	kvm@vger.kernel.org,  linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 2/6] KVM: selftests: Add a test to verify SEV {en,de}crypt debug ioctls
Date: Thu, 23 Jul 2026 14:29:52 -0700	[thread overview]
Message-ID: <amKH0E_VKOR5wyEG@google.com> (raw)
In-Reply-To: <7rg4rrbyecgoy32qzrye2r2wdy7bbalgl73anx6gd3qfndc2ar@7auj6hyujjg3>

On Thu, Jul 23, 2026, Michael Roth wrote:
> On Thu, Jul 23, 2026 at 05:17:26PM +0200, Paolo Bonzini wrote:
> > > > > I don't see a way to salvage SEV/SEV-ES on SNP systems, short of requiring
> > > > > CAP_SYS_BOOT or some other elevated permission to do *anything*.  Or redo SEV/SEV-ES
> > > > > support to require guest_memfd for operations that require putting pages into
> > > > > Firmware state.
> > > > 
> > > > Yah, short of maybe the above approach, I don't see any way around it atm :(
> > > > If you think it's worth pursuing though I can give that a shot on my
> > > > end.
> > 
> > The unavoidable ones include, if I understand correctly, not just
> > DBG_ENCRYPT but also LAUNCH_UPDATE_DATA?
> 
> That was my understanding, e.g. a user could try to use the HVA to
> trigger the copy_file_range() path right after
> snp_map_cmd_buf_desc()->rmp_mark_pages_firmware() is performed as
> part of servicing the KVM_SEV_LAUNCH_UPDATE_DATA request, and it seems
> like that would trigger the same issue. And bounce buffers wouldn't work
> for that one either.
> 
> and it's kinda important =/
> 
> > For encrypt the destination is the guest memory, so how would adding
> > guest_memfd support for SEV/SEV-ES work?  The guest doesn't have a
> > page-state-change call and neither does it have RMP nested page faults, so
> > how would you communicate the private<->shared switch to userspace?

Yeah, I was spitballing, I don't think guest_memfd has a viable path forward.  

> During early SNP hypervisor development (when guest_memfd was called
> "restricted_mem"), the patches were actually based on top of some patches
> from Nikunj that added guest_memfd/restricted_mem support for SEV-ES.
> One nice thing about that is it brought about support for lazy page
> allocation instead of relying on KVM_MEMORY_ENCRYPT_REG_REGION.
> 
> The support piggybacks off the KVM_HC_MAP_GPA RANGE hypercall that was
> added on the guest side to enable SEV live migration so the VMM could
> distinguish between shared/private (and punt private page handling to
> something else). By coincedence, that's also what SNP/TDX ended up using
> to forward conversion requests to userspace.
> 
> However, since SEV live migration never became a thing upstream there's
> potential that the KVM_HC_MAP_GPA_RANGE handling might miss some of the
> newer cases, which would lead to silent corruption (though with SNP
> enabled we might still get an indicator of whether or not the guest had
> the C-bit set, so we could detect a mismatch that way and maybe even
> be able to handle implicit conversion requests).
> 
> The big issue with this approach though is hugepages: we'd be dropping
> existing SEV support for both hugetlb/THP unless we implemented in-place
> conversion support for SEV-ES so it could eventually benefit from the
> hugetlb patches at least, but if in the meantime it's 4K-only I'm not
> sure anyone is going to get much use out of that, or still care about
> this support when gmem+hugepages is eventually enabled.
> 
> > 
> > > I say we wait for Paolo to get back from holiday (in a few weeks) before doing
> > > anything drastic.  I'll send a patch to fix the existing selftest though, no
> > > reason to leave that hole open.
> > 
> > Well, everything is drastic.  "Fortunately" AMD helped us with the firmware
> > update that already hides SEV-ES on SNP machines (CVE-2025-48514), so at
> > least there's a precedent.
> > 
> > Could we say CAP_SYS_BOOT is only be required to create the VM, after which
> > it's up to userspace to not screw up?  Probably not, because userspace can
> > then drop privileges and operate on the file descriptor; which is the actual
> > dangerous part.

Hmm, but there may be a path forward with CAP_SYS_BOOT.  It might require some
heavy lifting in userspace, but IIRC, LAUNCH_FINISH is typically called before
doing KVM_RUN on any vCPU.  So while it's not simply KVM_CREATE_VM, I do think
that "users" that care deeply enough about security/stability could implement a
VM builder that runs with elevated privileges, and then drops priveleges (or hands
off the VM) to actually run the guest.

> > The only not-horrible alternative would be a default-disabled module
> > parameter that allows SEV/SEV-ES on SNP systems but adds TAINT_USER when you
> > create one.  And downstreams that don't like the idea can just rip out the
> > taint.

What if we have the module param require CAP_SYS_BOOT for the affected iotcls?
Then TAINT_USER if it's disabled.  That way, if someone is sufficiently motivated
to harden their runtime-VMM, they can implement the builder without having to
manually remove the taint, and without having to completely trust the VMM (because
it's more than just a potential DoS; I wouldn't be at all surprised if someone
can turn this in a local privilege escalation).

> It might not be as elegant, but either of these seems more useful as a means
> to allow users to continue to be able to run existing workloads if they
> trust their userspace/VMMs. I'm worried the guest_memfd support would end up
> being mostly-wasted effort at this point since it's not a
> straightforward/drop-in replacement.

  reply	other threads:[~2026-07-23 21:29 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-01 20:35 [PATCH v2 0/6] KVM: SEV: sev_dbg_crypt() fix and overhaul Sean Christopherson
2026-05-01 20:35 ` [PATCH v2 1/6] KVM: SVM: Fix page overflow in sev_dbg_crypt() for ENCRYPT path Sean Christopherson
2026-05-01 20:35 ` [PATCH v2 2/6] KVM: selftests: Add a test to verify SEV {en,de}crypt debug ioctls Sean Christopherson
2026-05-21  7:04   ` [PATCH v2 2/6] KVM: selftests: Add a test to verify SEV {en,de}crypt kernel test robot
2026-05-21 14:28     ` Sean Christopherson
     [not found]   ` <ajNQ_Ix5e0p6FuFT@google.com>
     [not found]     ` <tx3hcnrhfbcz2p7e7umc5o2zrw74pluzuzgtlqt4dz5cc5nhxx@6tzzorc25nqw>
     [not found]       ` <s7jfbw3tnfgmp6blfqlfoi7yhq6f5n6xl62zzty5up45cqtsty@ljpjlvqw2gyy>
2026-06-23 19:55         ` [PATCH v2 2/6] KVM: selftests: Add a test to verify SEV {en,de}crypt debug ioctls Sean Christopherson
2026-06-23 23:22           ` Michael Roth
2026-06-24  0:22             ` Sean Christopherson
2026-06-24 21:24               ` Sean Christopherson
2026-06-24 23:11                 ` Michael Roth
2026-06-25  0:25                   ` Sean Christopherson
2026-07-23 15:17                     ` Paolo Bonzini
2026-07-23 21:07                       ` Michael Roth
2026-07-23 21:29                         ` Sean Christopherson [this message]
2026-05-01 20:35 ` [PATCH v2 3/6] KVM: SEV: Explicitly validate the dst buffer for debug operations Sean Christopherson
2026-05-01 20:35 ` [PATCH v2 4/6] KVM: SEV: Add helper function to pin/unpin a single page Sean Christopherson
2026-05-01 20:35 ` [PATCH v2 5/6] KVM: SEV: Rewrite logic to {de,en}crypt memory for debug Sean Christopherson
2026-05-01 20:35 ` [PATCH v2 6/6] KVM: SEV: Allocate only as many bytes as needed for temp crypt buffers Sean Christopherson
2026-05-19  0:41 ` [PATCH v2 0/6] KVM: SEV: sev_dbg_crypt() fix and overhaul Sean Christopherson
  -- strict thread matches above, loose matches on Subject: below --
2026-04-16 23:10 Sean Christopherson
2026-04-16 23:10 ` [PATCH v2 2/6] KVM: selftests: Add a test to verify SEV {en,de}crypt debug ioctls Sean Christopherson

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=amKH0E_VKOR5wyEG@google.com \
    --to=seanjc@google.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=michael.roth@amd.com \
    --cc=pbonzini@redhat.com \
    --cc=thomas.lendacky@amd.com \
    /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

all inboxes | Powered by JetHome®