Commit 4a66c7a9 authored by Ilya Maximets's avatar Ilya Maximets Committed by Eduardo Habkost
Browse files

hostmem-memfd: disable for systems without sealing support



If seals are not supported, memfd_create() will fail.
Furthermore, there is no way to disable it in this case because
'.seal' property is not registered.

This issue leads to vhost-user-test failures on RHEL 7.2:

  qemu-system-x86_64: -object memory-backend-memfd,id=mem,size=2M,: \
                      failed to create memfd: Invalid argument

and actually breaks the feature on such systems.

Let's restrict memfd backend to systems with sealing support.

Signed-off-by: default avatarIlya Maximets <i.maximets@samsung.com>
Message-Id: <20190311135850.6537-2-i.maximets@samsung.com>
Signed-off-by: default avatarEduardo Habkost <ehabkost@redhat.com>
parent f6a0d06b
Loading
Loading
Loading
Loading
+8 −10
Original line number Diff line number Diff line
@@ -154,7 +154,6 @@ memfd_backend_class_init(ObjectClass *oc, void *data)
                                              "Huge pages size (ex: 2M, 1G)",
                                              &error_abort);
    }
    if (qemu_memfd_check(MFD_ALLOW_SEALING)) {
    object_class_property_add_bool(oc, "seal",
                                   memfd_backend_get_seal,
                                   memfd_backend_set_seal,
@@ -163,7 +162,6 @@ memfd_backend_class_init(ObjectClass *oc, void *data)
                                          "Seal growing & shrinking",
                                          &error_abort);
}
}

static const TypeInfo memfd_backend_info = {
    .name = TYPE_MEMORY_BACKEND_MEMFD,
@@ -175,7 +173,7 @@ static const TypeInfo memfd_backend_info = {

static void register_types(void)
{
    if (qemu_memfd_check(0)) {
    if (qemu_memfd_check(MFD_ALLOW_SEALING)) {
        type_register_static(&memfd_backend_info);
    }
}
+3 −2
Original line number Diff line number Diff line
@@ -178,7 +178,8 @@ static void append_mem_opts(TestServer *server, GString *cmd_line,
                            int size, enum test_memfd memfd)
{
    if (memfd == TEST_MEMFD_AUTO) {
        memfd = qemu_memfd_check(0) ? TEST_MEMFD_YES : TEST_MEMFD_NO;
        memfd = qemu_memfd_check(MFD_ALLOW_SEALING) ? TEST_MEMFD_YES
                                                    : TEST_MEMFD_NO;
    }

    if (memfd == TEST_MEMFD_YES) {
@@ -930,7 +931,7 @@ static void register_vhost_user_test(void)
                 "virtio-net",
                 test_read_guest_mem, &opts);

    if (qemu_memfd_check(0)) {
    if (qemu_memfd_check(MFD_ALLOW_SEALING)) {
        opts.before = vhost_user_test_setup_memfd;
        qos_add_test("vhost-user/read-guest-mem/memfd",
                     "virtio-net",