67 lines
1.9 KiB
Diff
67 lines
1.9 KiB
Diff
|
From 3b794314149e40afaf3c456285e1e529747b6560 Mon Sep 17 00:00:00 2001
|
||
|
From: Holger Schurig <holgerschurig@gmail.com>
|
||
|
Date: Thu, 20 Feb 2014 14:39:13 +0100
|
||
|
Subject: [PATCH] build-sys: Add setns() functions if not in the C library.
|
||
|
|
||
|
Debian Stable is still using glibc 2.13, which doesn't provide the setns().
|
||
|
So we detect this and provide a tiny wrapper that issues the setns syscall
|
||
|
towards the kernel.
|
||
|
---
|
||
|
configure.ac | 5 +++--
|
||
|
src/shared/missing.h | 17 +++++++++++++++++
|
||
|
2 files changed, 20 insertions(+), 2 deletions(-)
|
||
|
|
||
|
diff --git configure.ac configure.ac
|
||
|
index 05ee098..18df6d8 100644
|
||
|
--- configure.ac
|
||
|
+++ configure.ac
|
||
|
@@ -241,10 +241,11 @@ LIBS="$save_LIBS"
|
||
|
|
||
|
AC_CHECK_FUNCS([fanotify_init fanotify_mark])
|
||
|
AC_CHECK_FUNCS([__secure_getenv secure_getenv])
|
||
|
-AC_CHECK_DECLS([gettid, pivot_root, name_to_handle_at], [], [], [[#include <sys/types.h>
|
||
|
+AC_CHECK_DECLS([gettid, pivot_root, name_to_handle_at, setns], [], [], [[#include <sys/types.h>
|
||
|
#include <unistd.h>
|
||
|
#include <sys/mount.h>
|
||
|
-#include <fcntl.h>]])
|
||
|
+#include <fcntl.h>
|
||
|
+#include <sched.h>]])
|
||
|
|
||
|
# This makes sure pkg.m4 is available.
|
||
|
m4_pattern_forbid([^_?PKG_[A-Z_]+$],[*** pkg.m4 missing, please install pkg-config])
|
||
|
diff --git src/shared/missing.h src/shared/missing.h
|
||
|
index 2661285..3142306 100644
|
||
|
--- src/shared/missing.h
|
||
|
+++ src/shared/missing.h
|
||
|
@@ -28,6 +28,7 @@
|
||
|
#include <fcntl.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <unistd.h>
|
||
|
+#include <errno.h>
|
||
|
#include <linux/oom.h>
|
||
|
#include <linux/input.h>
|
||
|
#include <linux/if_link.h>
|
||
|
@@ -353,3 +354,19 @@ static inline int name_to_handle_at(int fd, const char *name, struct file_handle
|
||
|
#endif
|
||
|
|
||
|
#endif
|
||
|
+
|
||
|
+#ifndef __NR_setns
|
||
|
+# if defined(__x86_64__)
|
||
|
+# define __NR_setns 308
|
||
|
+# elif defined(__i386__)
|
||
|
+# define __NR_setns 346
|
||
|
+# else
|
||
|
+# error "__NR_setns is not defined"
|
||
|
+# endif
|
||
|
+#endif
|
||
|
+
|
||
|
+#if !HAVE_DECL_SETNS
|
||
|
+static inline int setns(int fd, int nstype) {
|
||
|
+ return syscall(__NR_setns, fd, nstype);
|
||
|
+}
|
||
|
+#endif
|
||
|
--
|
||
|
1.7.7
|
||
|
|