![Baruch Siach](/assets/img/avatar_default.png)
glibc 2.27 added a system call wrapper for memfd_create() which collides with the local definition of the same symbol in trinity. Add a patch to detect the presence of memfd_create(), and avoid collision. Fixes: http://autobuild.buildroot.net/results/fda/fda07327395921fdc79cbb4f24b662209fee1be1/ http://autobuild.buildroot.net/results/f98/f98f43657cbf519a626257af5a21c8c228423856/ http://autobuild.buildroot.net/results/575/57558c418ea5c5011ac22e5236beff4d823c825b/ Cc: Vicente Olivert Riera <Vincent.Riera@imgtec.com> Signed-off-by: Baruch Siach <baruch@tkos.co.il> Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
88 lines
2.2 KiB
Diff
88 lines
2.2 KiB
Diff
From c93bb184ce996c4d77eefbae2ab0bf74f396ec45 Mon Sep 17 00:00:00 2001
|
|
From: Baruch Siach <baruch@tkos.co.il>
|
|
Date: Tue, 13 Mar 2018 06:53:06 +0200
|
|
Subject: [PATCH] memfd: fix build with glibc 2.27
|
|
|
|
glibc 2.27 added a wrapper for memfd_create(). This causes build
|
|
failure:
|
|
|
|
fds/memfd.c:19:12: error: static declaration of 'memfd_create' follows non-static declaration
|
|
static int memfd_create(__unused__ const char *uname, __unused__ unsigned int flag)
|
|
^~~~~~~~~~~~
|
|
|
|
Don't use the local definition when the libc provides one.
|
|
|
|
Signed-off-by: Baruch Siach <baruch@tkos.co.il>
|
|
---
|
|
Upstream status: https://github.com/kernelslacker/trinity/pull/23
|
|
|
|
configure | 23 +++++++++++++++++++++++
|
|
fds/memfd.c | 3 +++
|
|
2 files changed, 26 insertions(+)
|
|
|
|
diff --git a/configure b/configure
|
|
index dc0a87d8c1ad..c0166af33048 100755
|
|
--- a/configure
|
|
+++ b/configure
|
|
@@ -288,6 +288,29 @@ else
|
|
echo "#define USE_BTRFS 1" >> $CONFIGH
|
|
fi
|
|
|
|
+#############################################################################################
|
|
+# Does glibc provide memfd_create() syscall wrapper
|
|
+#
|
|
+echo -n "[*] Checking if glibc provides memfd_create.. "
|
|
+rm -f "$TMP" || exit 1
|
|
+
|
|
+cat >"$TMP.c" << EOF
|
|
+#include <sys/mman.h>
|
|
+
|
|
+void main()
|
|
+{
|
|
+ memfd_create();
|
|
+}
|
|
+EOF
|
|
+
|
|
+${CC} ${CFLAGS} "$TMP.c" -o "$TMP" &>"$TMP.log"
|
|
+if [ ! -x "$TMP" ]; then
|
|
+ echo $RED "[NO]" $COL_RESET
|
|
+else
|
|
+ echo $GREEN "[YES]" $COL_RESET
|
|
+ echo "#define USE_MEMFD_CREATE 1" >> $CONFIGH
|
|
+fi
|
|
+
|
|
#############################################################################################
|
|
|
|
check_header linux/caif/caif_socket.h USE_CAIF
|
|
diff --git a/fds/memfd.c b/fds/memfd.c
|
|
index 210678e4571c..aaaac2f78f54 100644
|
|
--- a/fds/memfd.c
|
|
+++ b/fds/memfd.c
|
|
@@ -5,6 +5,7 @@
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <unistd.h>
|
|
+#include <sys/mman.h>
|
|
|
|
#include "fd.h"
|
|
#include "memfd.h"
|
|
@@ -16,6 +17,7 @@
|
|
#include "trinity.h"
|
|
#include "udp.h"
|
|
|
|
+#ifndef USE_MEMFD_CREATE
|
|
static int memfd_create(__unused__ const char *uname, __unused__ unsigned int flag)
|
|
{
|
|
#ifdef SYS_memfd_create
|
|
@@ -24,6 +26,7 @@ static int memfd_create(__unused__ const char *uname, __unused__ unsigned int fl
|
|
return -ENOSYS;
|
|
#endif
|
|
}
|
|
+#endif
|
|
|
|
static void memfd_destructor(struct object *obj)
|
|
{
|
|
--
|
|
2.16.1
|
|
|