On Wednesday 28 Feb 2024 at 11:12:18 (+0100), David Hildenbrand wrote: > > > So you don't need any guest_memfd games to protect from that -- and one > > > doesn't have to travel back in time to have memory that isn't > > > swappable/migratable and only comes in one page size. > > > > > > [I'm not up-to-date which obscure corner-cases CCA requirement the s390x > > > implementation cannot fulfill -- like replacing pages in page tables and > > > such; I suspect pKVM also cannot cover all these corner-cases] > > > > Thanks for this. I'll do some more reading on how things work with s390x. > > > > Right, and of course, one key difference of course is that pKVM > > doesn't encrypt anything, and only relies on stage-2 protection to > > protect the guest. > > I don't remember what exactly s390x does, but I recall that it might only > encrypt the memory content as it transitions a page from secure to > non-secure. > > Something like that could also be implemented using pKVM (unless I am > missing something), but it might not be that trivial, of course :) One of the complicated aspects of having the host migrate pages like so is for the hypervisor to make sure the content of the page has not been tempered with when the new page is re-mapped in the guest. That means having additional tracking in the hypervisor of pages that have been encrypted and returned to the host, indexed by IPA, with something like a 'checksum' of some sort, which is non-trivial to do securely from a cryptographic PoV. A simpler and secure way to do this is (I think) is to do hypervisor-assisted migration. IOW, pKVM exposes a new migrate_page(ipa, old_pa, new_pa) hypercall which Linux can call to migrate a page. pKVM unmaps the new page from the host stage-2, unmap the old page from guest stage-2, does the copy, wipes the old page, maps the pages in the respective page-tables, and off we go. That way the content is never visible to Linux and that avoids the problems I highlighted above by construction. The downside is that it doesn't work for swapping, but that is quite hard to do in general...