qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PULL 14/38] util: add fallback for qemu_memfd_alloc()


From: Michael S. Tsirkin
Subject: [Qemu-devel] [PULL 14/38] util: add fallback for qemu_memfd_alloc()
Date: Wed, 21 Oct 2015 13:27:16 +0300

From: Marc-André Lureau <address@hidden>

Add an open/unlink/mmap fallback for system that do not support
memfd (only available since 3.17, ~1y ago).

This patch may require additional SELinux policies to work for enforced
systems, but should fail gracefully in this case.

Signed-off-by: Marc-André Lureau <address@hidden>
Reviewed-by: Michael S. Tsirkin <address@hidden>
Signed-off-by: Michael S. Tsirkin <address@hidden>
Tested-by: Thibaut Collet <address@hidden>
---
 util/memfd.c | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/util/memfd.c b/util/memfd.c
index c119483..4b23765 100644
--- a/util/memfd.c
+++ b/util/memfd.c
@@ -97,8 +97,24 @@ void *qemu_memfd_alloc(const char *name, size_t size, 
unsigned int seals,
             return NULL;
         }
     } else {
-        perror("memfd");
-        return NULL;
+        const char *tmpdir = g_get_tmp_dir();
+        gchar *fname;
+
+        fname = g_strdup_printf("%s/memfd-XXXXXX", tmpdir);
+        mfd = mkstemp(fname);
+        unlink(fname);
+        g_free(fname);
+
+        if (mfd == -1) {
+            perror("mkstemp");
+            return NULL;
+        }
+
+        if (ftruncate(mfd, size) == -1) {
+            perror("ftruncate");
+            close(mfd);
+            return NULL;
+        }
     }
 
     ptr = mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, mfd, 0);
-- 
MST




reply via email to

[Prev in Thread] Current Thread [Next in Thread]