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 205f822e10c6c..541d8cdd0bbf7 100644 --- a/tools/testing/selftests/kvm/guest_memfd_test.c +++ b/tools/testing/selftests/kvm/guest_memfd_test.c @@ -547,6 +547,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); \ @@ -609,6 +624,7 @@ static void test_guest_memfd(unsigned long vm_type) test_resource_fd_unsupported_fs(vm); test_resource_fd_memfd(vm); test_resource_fd_tmpfs_swap(vm); + test_resource_fd_tmpfs_huge(vm); __test_guest_memfd(vm, 0); -- 2.56.0.257.gf7497c7d27-goog