From: Ackerley Tng <[email protected]>

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 <[email protected]>
---
 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



Reply via email to