[PATCH v6 00/10] KVM: Mapping guest_memfd backed memory at the host for software protected VMs

Fuad Tabba
2025-03-12T17:58:30Z

Main changes since v5 [1]:
- Added handling of folio_put() when KVM is configured as a module
- KVM_GMEM_SHARED_MEM is orthogonal to KVM_GENERIC_MEMORY_ATTRIBUTES
(Ackerley)
- kvm_gmem_offset_is_shared() takes folio as parameter to check locking
(Kirill)
- Refactoring and fixes from comments on previous version
- Rebased on Linux 6.14-rc6

The purpose of this series is to serve as a base for _restricted_
mmap() support for guest_memfd backed memory at the host [2]. It
allows experimentation with what that support would be like in
the safe environment of software and non-confidential VM types.

For more background and for how to test this series, please refer
to v2 [3]. Note that an updated version of kvmtool that works
with this series is available here [4].

I'm working on respinning the series that tracks folio sharing [5]. I'll
post that one soon.

Cheers,
/fuad

[1] https://lore.kernel.org/all/20250303171013.3548775-1-tabba@google.com/
[2] https://lore.kernel.org/all/20250117163001.2326672-1-tabba@google.com/
[3] https://lore.kernel.org/all/20250129172320.950523-1-tabba@google.com/
[4] https://android-kvm.googlesource.com/kvmtool/+/refs/heads/tabba/guestmem-6.14
[5] https://lore.kernel.org/all/20250117163001.2326672-1-tabba@google.com/

Fuad Tabba (10):
mm: Consolidate freeing of typed folios on final folio_put()
KVM: guest_memfd: Handle final folio_put() of guest_memfd pages
KVM: guest_memfd: Handle kvm_gmem_handle_folio_put() for KVM as a
module
KVM: guest_memfd: Allow host to map guest_memfd() pages
KVM: guest_memfd: Handle in-place shared memory as guest_memfd backed
memory
KVM: x86: Mark KVM_X86_SW_PROTECTED_VM as supporting guest_memfd
shared memory
KVM: arm64: Refactor user_mem_abort() calculation of force_pte
KVM: arm64: Handle guest_memfd()-backed guest page faults
KVM: arm64: Enable mapping guest_memfd in arm64
KVM: guest_memfd: selftests: guest_memfd mmap() test when mapping is
allowed

arch/arm64/include/asm/kvm_host.h | 10 ++
arch/arm64/kvm/Kconfig | 1 +
arch/arm64/kvm/mmu.c | 76 +++++++-----
arch/x86/include/asm/kvm_host.h | 5 +
arch/x86/kvm/Kconfig | 3 +-
include/linux/kvm_host.h | 23 +++-
include/linux/page-flags.h | 31 +++++
include/uapi/linux/kvm.h | 1 +
mm/debug.c | 1 +
mm/swap.c | 50 +++++++-
tools/testing/selftests/kvm/Makefile.kvm | 1 +
.../testing/selftests/kvm/guest_memfd_test.c | 75 +++++++++++-
virt/kvm/Kconfig | 4 +
virt/kvm/guest_memfd.c | 110 ++++++++++++++++++
virt/kvm/kvm_main.c | 9 +-
15 files changed, 354 insertions(+), 46 deletions(-)

base-commit: 80e54e84911a923c40d7bee33a34c1b4be148d7a
--
2.49.0.rc0.332.g42c0ae87b1-goog