|
|
Log in / Subscribe / Register

KVM: Restricted mapping of guest_memfd at the host and arm64 support

From:  Fuad Tabba <tabba-AT-google.com>
To:  kvm-AT-vger.kernel.org, linux-arm-msm-AT-vger.kernel.org, linux-mm-AT-kvack.org
Subject:  [PATCH v6 0/7] KVM: Restricted mapping of guest_memfd at the host and arm64 support
Date:  Tue, 18 Mar 2025 16:20:39 +0000
Message-ID:  <20250318162046.4016367-1-tabba@google.com>
Cc:  pbonzini-AT-redhat.com, chenhuacai-AT-kernel.org, mpe-AT-ellerman.id.au, anup-AT-brainfault.org, paul.walmsley-AT-sifive.com, palmer-AT-dabbelt.com, aou-AT-eecs.berkeley.edu, seanjc-AT-google.com, viro-AT-zeniv.linux.org.uk, brauner-AT-kernel.org, willy-AT-infradead.org, akpm-AT-linux-foundation.org, xiaoyao.li-AT-intel.com, yilun.xu-AT-intel.com, chao.p.peng-AT-linux.intel.com, jarkko-AT-kernel.org, amoorthy-AT-google.com, dmatlack-AT-google.com, isaku.yamahata-AT-intel.com, mic-AT-digikod.net, vbabka-AT-suse.cz, vannapurve-AT-google.com, ackerleytng-AT-google.com, mail-AT-maciej.szmigiero.name, david-AT-redhat.com, michael.roth-AT-amd.com, wei.w.wang-AT-intel.com, liam.merwick-AT-oracle.com, isaku.yamahata-AT-gmail.com, kirill.shutemov-AT-linux.intel.com, suzuki.poulose-AT-arm.com, steven.price-AT-arm.com, quic_eberman-AT-quicinc.com, quic_mnalajal-AT-quicinc.com, quic_tsoni-AT-quicinc.com, quic_svaddagi-AT-quicinc.com, quic_cvanscha-AT-quicinc.com, quic_pderrin-AT-quicinc.com, quic_pheragu-AT-quicinc.com, catalin.marinas-AT-arm.com, james.morse-AT-arm.com, yuzenghui-AT-huawei.com, oliver.upton-AT-linux.dev, maz-AT-kernel.org, will-AT-kernel.org, qperret-AT-google.com, keirf-AT-google.com, roypat-AT-amazon.co.uk, shuah-AT-kernel.org, hch-AT-infradead.org, jgg-AT-nvidia.com, rientjes-AT-google.com, jhubbard-AT-nvidia.com, fvdl-AT-google.com, hughd-AT-google.com, jthoughton-AT-google.com, peterx-AT-redhat.com, tabba-AT-google.com
Archive-link:  Article

This series adds restricted mmap() support to guest_memfd, as well as
support for guest_memfd on arm64. Please see v3 for the context [1].

Main changes since v5 [2]:
- Freeze folio refcounts when checking them to avoid races (Kirill,
  Vlastimili, Ackerley)
- Handle invalidation (e.g., on truncation) of potentially shared memory
  (Ackerley)
- Rebased on the `KVM: Mapping guest_memfd backed memory at the host for
  software protected VMs` series [3], which entails renaming of MAPPABLE
  to SHAREABLE and a rebase on Linux 6.14-rc7.

The state diagram that uses the new states in this patch series,
and how they would interact with sharing/unsharing in pKVM [4].

Cheers,
/fuad

[1] https://lore.kernel.org/all/20241010085930.1546800-1-tabb...
[2] https://lore.kernel.org/all/20250117163001.2326672-1-tabb...
[3] https://lore.kernel.org/all/20250318161823.4005529-1-tabb...
[4] https://lpc.events/event/18/contributions/1758/attachment...

Ackerley Tng (2):
  KVM: guest_memfd: Make guest mem use guest mem inodes instead of
    anonymous inodes
  KVM: guest_memfd: Track folio sharing within a struct kvm_gmem_private

Fuad Tabba (5):
  KVM: guest_memfd: Introduce kvm_gmem_get_pfn_locked(), which retains
    the folio lock
  KVM: guest_memfd: Folio sharing states and functions that manage their
    transition
  KVM: guest_memfd: Restore folio state after final folio_put()
  KVM: guest_memfd: Handle invalidation of shared memory
  KVM: guest_memfd: Add a guest_memfd() flag to initialize it as shared

 Documentation/virt/kvm/api.rst                |   4 +
 include/linux/kvm_host.h                      |  56 +-
 include/uapi/linux/kvm.h                      |   1 +
 include/uapi/linux/magic.h                    |   1 +
 .../testing/selftests/kvm/guest_memfd_test.c  |   7 +-
 virt/kvm/guest_memfd.c                        | 589 ++++++++++++++++--
 virt/kvm/kvm_main.c                           |  62 ++
 7 files changed, 682 insertions(+), 38 deletions(-)


base-commit: 1ea0414b447c8c96e6a6f6f953323c3df71b85a6
-- 
2.49.0.rc1.451.g8f38331e32-goog




Copyright © 2025, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds