On Fri, Feb 24, 2023, Elliot Berman wrote: > > > On 2/24/2023 2:19 AM, Fuad Tabba wrote: > > Hi, > > > > On Tue, Feb 14, 2023 at 9:26 PM Elliot Berman <quic_eberman@xxxxxxxxxxx> wrote: > > > > > > > > > When launching a virtual machine, Gunyah userspace allocates memory for > > > the guest and informs Gunyah about these memory regions through > > > SET_USER_MEMORY_REGION ioctl. > > > > I'm working on pKVM [1], and regarding the problem of donating private > > memory to a guest, we and others working on confidential computing > > have faced a similar issue that this patch is trying to address. In > > pKVM, we've initially taken an approach similar to the one here by > > pinning the pages being donated to prevent swapping or migration [2]. > > However, we've encountered issues with this approach since the memory > > is still mapped by the host, which could cause the system to crash on > > an errant access. > > > > Instead, we've been working on adopting an fd-based restricted memory > > approach that was initially proposed for TDX [3] and is now being > > considered by others in the confidential computing space as well > > (e.g., Arm CCA [4]). The basic idea is that the host manages the guest > > memory via a file descriptor instead of a userspace address. It cannot > > map that memory (unless explicitly shared by the guest [5]), > > eliminating the possibility of the host trying to access private > > memory accidentally or being tricked by a malicious actor. This is > > based on memfd with some restrictions. It handles swapping and > > migration by disallowing them (for now [6]), and adds a new type of > > memory region to KVM to accommodate having an fd representing guest > > memory. > > > > Although the fd-based restricted memory isn't upstream yet, we've > > ported the latest patches to arm64 and made changes and additions to > > make it work with pKVM, to test it and see if the solution is feasible > > for us (it is). I wanted to mention this work in case you find it > > useful, and in the hopes that we can all work on confidential > > computing using the same interfaces as much as possible. > > Thanks for highlighting the memfd_restricted changes to us! We'll > investigate how/if it can suit Gunyah usecases. Can you provide Gunyah's requirements/rules and use cases as they relate to memory management? I agree with Fuad, this is pretty much exactly what memfd_restricted() is intended to handle. If Gunyah has a unique requirement or use case, it'd be helpful to find out sooner than later. E.g. 1. What is the state of memory when it's accepted by a VM? Is it undefined, i.e. the VM's responsibility to initialize? If not, is it always zero-initialized or can memory be populated by the RM? 2. When exclusive/private memory is reclaimed, can the VM's data be preserved, or is it unconditionally 3. How frequently is memory transition allocated/reclaimed? 4. Are there assumptions and/or limitations on the size or granlarity of memory objects? 5. Can memory be shared by multiple VMs but _not_ be accessible from the RM? 6. etc. :-) Thanks!