From: Ackerley Tng Ensure that guest_memfd creation fails with -EINVAL when passed a tmpfs resource pool mount descriptor that has huge pages enabled, as required by the tmpfs guest_memfd provider implementation. Signed-off-by: Ackerley Tng --- tools/testing/selftests/kvm/guest_memfd_test.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tools/testing/selftests/kvm/guest_memfd_test.c b/tools/testing/selftests/kvm/guest_memfd_test.c index 5d017164d7b45..e8199ed17b0f8 100644 --- a/tools/testing/selftests/kvm/guest_memfd_test.c +++ b/tools/testing/selftests/kvm/guest_memfd_test.c @@ -526,6 +526,21 @@ static void test_resource_fd_tmpfs_swap(struct kvm_vm *vm) close(pool_fd); } +static void test_resource_fd_tmpfs_huge(struct kvm_vm *vm) +{ + int pool_fd, fd; + + pool_fd = create_tmpfs_pool_fd("always", true, page_size); + + fd = __vm_create_guest_memfd_resource(vm, page_size, + GUEST_MEMFD_FLAG_USE_RESOURCE, + pool_fd); + TEST_ASSERT(fd < 0, "guest_memfd with huge-enabled tmpfs should fail"); + TEST_ASSERT_EQ(errno, EINVAL); + + close(pool_fd); +} + #define ____gmem_test(__test, __vm, __flags, __gmem_size, args...) \ do { \ int fd = vm_create_guest_memfd(__vm, __gmem_size, __flags); \ @@ -588,6 +603,7 @@ static void test_guest_memfd(unsigned long vm_type) test_resource_fd_unsupported_fs(vm); test_resource_fd_tmpfs_file(vm); test_resource_fd_tmpfs_swap(vm); + test_resource_fd_tmpfs_huge(vm); __test_guest_memfd(vm, 0); -- 2.56.0.rc1.315.gc6ed9934b7-goog