Thread (239 messages) 239 messages, 19 authors, 2022-09-19

Re: [PATCH Part2 v5 00/45] Add AMD Secure Nested Paging (SEV-SNP) Hypervisor Support

From: Borislav Petkov <bp@alien8.de>
Date: 2021-11-12 20:55:49
Also in: kvm, linux-crypto, linux-mm, lkml

On Fri, Nov 12, 2021 at 08:37:59PM +0000, Sean Christopherson wrote:
Let userspace decide what is mapped shared and what is mapped private. 
With "userspace", you mean the *host* userspace?
The kernel and KVM provide the APIs/infrastructure to do the actual
conversions in a thread-safe fashion and also to enforce the current
state, but userspace is the control plane.

It would require non-trivial changes in userspace if there are multiple processes
accessing guest memory, e.g. Peter's networking daemon example, but it _is_ fully
solvable.  The exit to userspace means all three components (guest, kernel, 
and userspace) have full knowledge of what is shared and what is private.  There
is zero ambiguity:

  - if userspace accesses guest private memory, it gets SIGSEGV or whatever.  
That SIGSEGV is generated by the host kernel, I presume, after it checks
whether the memory belongs to the guest?
  - if kernel accesses guest private memory, it does BUG/panic/oops[*]
If *it* is the host kernel, then you probably shouldn't do that -
otherwise you just killed the host kernel on which all those guests are
running.
  - if guest accesses memory with the incorrect C/SHARED-bit, it gets killed.
Yah, that's the easy one.
This is the direction KVM TDX support is headed, though it's obviously still a WIP.

And ideally, to avoid implicit conversions at any level, hardware vendors' ABIs
define that:

  a) All convertible memory, i.e. RAM, starts as private.
  b) Conversions between private and shared must be done via explicit hypercall.
I like the explicit nature of this but devil's in the detail and I'm no
virt guy...
Without (b), userspace and thus KVM have to treat guest accesses to the incorrect
type as implicit conversions.

[*] Sadly, fully preventing kernel access to guest private is not possible with
    TDX, especially if the direct map is left intact.  But maybe in the future
    TDX will signal a fault instead of poisoning memory and leaving a #MC mine.
Yah, the #MC thing sounds like someone didn't think things through. ;-\

Thx.

-- 
Regards/Gruss,
    Boris.

https://people.kernel.org/tglx/notes-about-netiquette
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help