util: add fallback for qemu_memfd_alloc()
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 <marcandre.lureau@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Tested-by: Thibaut Collet <thibaut.collet@6wind.com>
This commit is contained in:
parent
d3592199ba
commit
35f9b6ef3a
20
util/memfd.c
20
util/memfd.c
@ -97,8 +97,24 @@ void *qemu_memfd_alloc(const char *name, size_t size, unsigned int seals,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
perror("memfd");
|
const char *tmpdir = g_get_tmp_dir();
|
||||||
return NULL;
|
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);
|
ptr = mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, mfd, 0);
|
||||||
|
Loading…
Reference in New Issue
Block a user