From: Ackerley Tng Add test coverage verifying that passing a directory file descriptor from an unsupported filesystem without provider operations as a resource file fails with EOPNOTSUPP. Signed-off-by: Ackerley Tng --- tools/testing/selftests/kvm/guest_memfd_test.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/tools/testing/selftests/kvm/guest_memfd_test.c b/tools/testing/selftests/kvm/guest_memfd_test.c index 84b958b9ef715..31bc74c4c26bd 100644 --- a/tools/testing/selftests/kvm/guest_memfd_test.c +++ b/tools/testing/selftests/kvm/guest_memfd_test.c @@ -436,6 +436,27 @@ static void test_resource_fd_invalid(struct kvm_vm *vm) TEST_ASSERT_EQ(errno, EBADF); } +static void test_resource_fd_unsupported_fs(struct kvm_vm *vm) +{ + int fd, file_fd; + + /* + * Passing an FD from an unsupported filesystem without provider ops + * (e.g. the /proc mount root directory) is rejected by KVM with + * EOPNOTSUPP. + */ + file_fd = open("/proc", O_DIRECTORY | O_RDONLY); + TEST_ASSERT(file_fd >= 0, "open /proc failed"); + + fd = __vm_create_guest_memfd_resource(vm, page_size, + GUEST_MEMFD_FLAG_USE_RESOURCE, + file_fd); + TEST_ASSERT(fd < 0, "guest_memfd with /proc fd should fail"); + TEST_ASSERT_EQ(errno, EOPNOTSUPP); + + close(file_fd); +} + #define ____gmem_test(__test, __vm, __flags, __gmem_size, args...) \ do { \ int fd = vm_create_guest_memfd(__vm, __gmem_size, __flags); \ @@ -495,6 +516,7 @@ static void test_guest_memfd(unsigned long vm_type) test_guest_memfd_flags(vm); test_resource_fd_invalid(vm); + test_resource_fd_unsupported_fs(vm); __test_guest_memfd(vm, 0); -- 2.56.0.rc1.315.gc6ed9934b7-goog