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

