diff --git a/src/basic/memfd-util.c b/src/basic/memfd-util.c index 96024bc485..99df236e7d 100644 --- a/src/basic/memfd-util.c +++ b/src/basic/memfd-util.c @@ -20,6 +20,22 @@ #include "string-util.h" #include "utf8.h" +int memfd_create_wrapper(const char *name, unsigned mode) { + unsigned mode_compat; + int mfd; + + mfd = RET_NERRNO(memfd_create(name, mode)); + if (mfd != -EINVAL) + return mfd; + + mode_compat = mode & ~(MFD_EXEC | MFD_NOEXEC_SEAL); + + if (mode == mode_compat) + return mfd; + + return RET_NERRNO(memfd_create(name, mode_compat)); +} + int memfd_new(const char *name) { _cleanup_free_ char *g = NULL; diff --git a/src/basic/memfd-util.h b/src/basic/memfd-util.h index d6da268da0..0fe8e3a3c4 100644 --- a/src/basic/memfd-util.h +++ b/src/basic/memfd-util.h @@ -6,6 +6,8 @@ #include #include +int memfd_create_wrapper(const char *name, unsigned mode); + int memfd_new(const char *name); int memfd_new_and_map(const char *name, size_t sz, void **p); int memfd_new_and_seal(const char *name, const void *data, size_t sz);