From: Ackerley Tng Creating a guest_memfd with GUEST_MEMFD_FLAG_PFN_MODE requires GUEST_MEMFD_FLAG_USE_RESOURCE. Skip testing GUEST_MEMFD_FLAG_PFN_MODE as an isolated flag in test_guest_memfd_flags() because creating a guest_memfd with PFN_MODE alone without USE_RESOURCE is rejected by KVM with EINVAL. In test_resource_fd_invalid(), verify that attempting to create a guest_memfd with GUEST_MEMFD_FLAG_PFN_MODE without GUEST_MEMFD_FLAG_USE_RESOURCE fails with EINVAL. Signed-off-by: Ackerley Tng --- tools/include/uapi/linux/kvm.h | 1 + tools/testing/selftests/kvm/guest_memfd_test.c | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/tools/include/uapi/linux/kvm.h b/tools/include/uapi/linux/kvm.h index 66c1f40b50c29..3ef7bc37a7070 100644 --- a/tools/include/uapi/linux/kvm.h +++ b/tools/include/uapi/linux/kvm.h @@ -1655,6 +1655,7 @@ struct kvm_memory_attributes { #define GUEST_MEMFD_FLAG_MMAP (1ULL << 0) #define GUEST_MEMFD_FLAG_INIT_SHARED (1ULL << 1) #define GUEST_MEMFD_FLAG_USE_RESOURCE (1ULL << 2) +#define GUEST_MEMFD_FLAG_PFN_MODE (1ULL << 3) struct kvm_create_guest_memfd { __u64 size; diff --git a/tools/testing/selftests/kvm/guest_memfd_test.c b/tools/testing/selftests/kvm/guest_memfd_test.c index cbc2f309664b2..fb9d50be2e3b6 100644 --- a/tools/testing/selftests/kvm/guest_memfd_test.c +++ b/tools/testing/selftests/kvm/guest_memfd_test.c @@ -407,7 +407,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) + if (flag == GUEST_MEMFD_FLAG_USE_RESOURCE || + flag == GUEST_MEMFD_FLAG_PFN_MODE) continue; fd = __vm_create_guest_memfd(vm, page_size, flag); if (flag & valid_flags) { @@ -432,6 +433,11 @@ static void test_resource_fd_invalid(struct kvm_vm *vm) TEST_ASSERT(fd < 0, "guest_memfd with resource_fd but without flag should fail"); TEST_ASSERT_EQ(errno, EINVAL); + /* PFN_MODE without GUEST_MEMFD_FLAG_USE_RESOURCE fails */ + fd = __vm_create_guest_memfd(vm, page_size, GUEST_MEMFD_FLAG_PFN_MODE); + TEST_ASSERT(fd < 0, "guest_memfd with PFN_MODE without USE_RESOURCE 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); -- 2.56.0.257.gf7497c7d27-goog