From: Marc-André Lureau <marcandre.lur...@redhat.com> Signed-off-by: Marc-André Lureau <marcandre.lur...@redhat.com> --- include/qemu/memfd.h | 1 + util/memfd.c | 19 ++++++++++++++----- 2 files changed, 15 insertions(+), 5 deletions(-)
diff --git a/include/qemu/memfd.h b/include/qemu/memfd.h index 745a8c5..41c24d8 100644 --- a/include/qemu/memfd.h +++ b/include/qemu/memfd.h @@ -16,6 +16,7 @@ #define F_SEAL_WRITE 0x0008 /* prevent writes */ #endif +int qemu_memfd_create(const char *name, size_t size, unsigned int seals); void *qemu_memfd_alloc(const char *name, size_t size, unsigned int seals, int *fd); void qemu_memfd_free(void *ptr, size_t size, int fd); diff --git a/util/memfd.c b/util/memfd.c index 7c40691..31aaced 100644 --- a/util/memfd.c +++ b/util/memfd.c @@ -64,14 +64,10 @@ static int memfd_create(const char *name, unsigned int flags) * memfd with sealing, but may fallback on other methods without * sealing. */ -void *qemu_memfd_alloc(const char *name, size_t size, unsigned int seals, - int *fd) +int qemu_memfd_create(const char *name, size_t size, unsigned int seals) { - void *ptr; int mfd = -1; - *fd = -1; - #ifdef CONFIG_LINUX if (seals) { mfd = memfd_create(name, MFD_ALLOW_SEALING | MFD_CLOEXEC); @@ -117,6 +113,19 @@ void *qemu_memfd_alloc(const char *name, size_t size, unsigned int seals, } } + return mfd; +} + +void *qemu_memfd_alloc(const char *name, size_t size, unsigned int seals, + int *fd) +{ + void *ptr; + int mfd = qemu_memfd_create(name, size, seals); + + if (mfd == -1) { + return NULL; + } + ptr = mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, mfd, 0); if (ptr == MAP_FAILED) { perror("mmap"); -- 2.5.5