From: Ackerley Tng <[email protected]>

Add negative test coverage verifying that creating a guest_memfd
instance with a non-zero resource_fd when GUEST_MEMFD_FLAG_USE_RESOURCE
is clear fails with -EINVAL, and creating with an invalid resource_fd
fails with -EBADF.

Signed-off-by: Ackerley Tng <[email protected]>
---
 tools/testing/selftests/kvm/guest_memfd_test.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/tools/testing/selftests/kvm/guest_memfd_test.c 
b/tools/testing/selftests/kvm/guest_memfd_test.c
index 2233d871a38f4..84b958b9ef715 100644
--- a/tools/testing/selftests/kvm/guest_memfd_test.c
+++ b/tools/testing/selftests/kvm/guest_memfd_test.c
@@ -404,6 +404,8 @@ static void test_guest_memfd_flags(struct kvm_vm *vm)
        int fd;
 
        for (flag = BIT(0); flag; flag <<= 1) {
+               if (flag == GUEST_MEMFD_FLAG_USE_RESOURCE)
+                       continue;
                fd = __vm_create_guest_memfd(vm, page_size, flag);
                if (flag & valid_flags) {
                        TEST_ASSERT(fd >= 0,
@@ -418,6 +420,22 @@ static void test_guest_memfd_flags(struct kvm_vm *vm)
        }
 }
 
+static void test_resource_fd_invalid(struct kvm_vm *vm)
+{
+       int fd;
+
+       /* Non-zero resource_fd without GUEST_MEMFD_FLAG_USE_RESOURCE fails */
+       fd = __vm_create_guest_memfd_resource(vm, page_size, 0, 1);
+       TEST_ASSERT(fd < 0, "guest_memfd with resource_fd but without flag 
should fail");
+       TEST_ASSERT_EQ(errno, EINVAL);
+
+       /* Bad file descriptor with GUEST_MEMFD_FLAG_USE_RESOURCE fails */
+       fd = __vm_create_guest_memfd_resource(vm, page_size,
+                                             GUEST_MEMFD_FLAG_USE_RESOURCE, 
-1);
+       TEST_ASSERT(fd < 0, "guest_memfd with -1 resource_fd should fail");
+       TEST_ASSERT_EQ(errno, EBADF);
+}
+
 #define ____gmem_test(__test, __vm, __flags, __gmem_size, args...)     \
 do {                                                                   \
        int fd = vm_create_guest_memfd(__vm, __gmem_size, __flags);     \
@@ -476,6 +494,8 @@ static void test_guest_memfd(unsigned long vm_type)
 
        test_guest_memfd_flags(vm);
 
+       test_resource_fd_invalid(vm);
+
        __test_guest_memfd(vm, 0);
 
        flags = vm_check_cap(vm, KVM_CAP_GUEST_MEMFD_FLAGS);

-- 
2.56.0.rc1.315.gc6ed9934b7-goog



Reply via email to