From: Thomas Weißschuh Date: Tue, 14 Mar 2023 03:42:05 +0000 (+0000) Subject: memfd-util: add wrapper for memfd_create X-Git-Tag: v254-rc1~1020^2~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ad62530ebb397982a73266a07ac6f182e47922de;p=thirdparty%2Fsystemd.git memfd-util: add wrapper for memfd_create The wrapper removes the flags MFD_EXEC and MFD_NOEXEC_SEAL when running on kernels not understanding those flags. --- diff --git a/src/basic/memfd-util.c b/src/basic/memfd-util.c index 96024bc485d..99df236e7db 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 d6da268da05..0fe8e3a3c4d 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);