On Fri, 19 Jun 2026 at 01:32, Ackerley Tng via B4 Relay <[email protected]> wrote: > > From: Ackerley Tng <[email protected]> > > Add a test to verify that deallocating a page in a guest memfd region via > fallocate() with FALLOC_FL_PUNCH_HOLE does not alter the shared or private > status of the corresponding memory range. > > When a page backing a guest memfd mapping is deallocated, e.g., by punching > a hole or truncating the file, and then subsequently faulted back in, the > new page must inherit the correct shared/private status tracked by > guest_memfd. > > Signed-off-by: Ackerley Tng <[email protected]> > Co-developed-by: Sean Christopherson <[email protected]> > Signed-off-by: Sean Christopherson <[email protected]>
Reviewed-by: Fuad Tabba <[email protected]> Cheers, /fuad > --- > .../selftests/kvm/x86/guest_memfd_conversions_test.c | 14 > ++++++++++++++ > 1 file changed, 14 insertions(+) > > diff --git a/tools/testing/selftests/kvm/x86/guest_memfd_conversions_test.c > b/tools/testing/selftests/kvm/x86/guest_memfd_conversions_test.c > index 0b024fb7227f0..f03af2c46426f 100644 > --- a/tools/testing/selftests/kvm/x86/guest_memfd_conversions_test.c > +++ b/tools/testing/selftests/kvm/x86/guest_memfd_conversions_test.c > @@ -10,6 +10,7 @@ > #include <linux/sizes.h> > > #include "kvm_util.h" > +#include "kvm_syscalls.h" > #include "kselftest_harness.h" > #include "test_util.h" > #include "ucall_common.h" > @@ -309,6 +310,19 @@ > GMEM_CONVERSION_MULTIPAGE_TEST_INIT_SHARED(unallocated_folios, 8) > test_convert_to_shared(t, i, 'B', 'C', 'D'); > } > > +/* Truncation should not affect shared/private status. */ > +GMEM_CONVERSION_TEST_INIT_SHARED(truncate) > +{ > + host_do_rmw(t->mem, 0, 0, 'A'); > + kvm_fallocate(t->gmem_fd, FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE, > 0, page_size); > + host_do_rmw(t->mem, 0, 0, 'A'); > + > + test_convert_to_private(t, 0, 'A', 'B'); > + > + kvm_fallocate(t->gmem_fd, FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE, > 0, page_size); > + test_private(t, 0, 0, 'A'); > +} > + > int main(int argc, char *argv[]) > { > TEST_REQUIRE(kvm_check_cap(KVM_CAP_VM_TYPES) & > BIT(KVM_X86_SW_PROTECTED_VM)); > > -- > 2.55.0.rc0.738.g0c8ab3ebcc-goog > >
