[lxc-devel] [lxcfs/master] tree-wide: add and use syscall_numbers.h

brauner on Github lxc-bot at linuxcontainers.org
Fri Mar 20 17:43:23 UTC 2020


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 403 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20200320/895c875d/attachment.bin>
-------------- next part --------------
From cb36caa4cf6dbb1ac1471650e17d34f8e9d144cf Mon Sep 17 00:00:00 2001
From: Christian Brauner <christian.brauner at ubuntu.com>
Date: Fri, 20 Mar 2020 18:42:37 +0100
Subject: [PATCH] tree-wide: add and use syscall_numbers.h

The same thing that I did for LXC.

Signed-off-by: Christian Brauner <christian.brauner at ubuntu.com>
---
 src/Makefile.am               |   3 +
 src/bindings.c                |   6 +-
 src/cgroups/cgroup2_devices.h |  38 ++--------
 src/syscall_numbers.h         | 127 ++++++++++++++++++++++++++++++++++
 src/utils.h                   |   9 +--
 5 files changed, 138 insertions(+), 45 deletions(-)
 create mode 100644 src/syscall_numbers.h

diff --git a/src/Makefile.am b/src/Makefile.am
index 84c6528..030d6b5 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -20,6 +20,7 @@ liblxcfs_la_SOURCES = api_extensions.h \
 		      proc_cpuview.c proc_cpuview.h \
 		      proc_fuse.c proc_fuse.h \
 		      proc_loadavg.c proc_loadavg.h \
+		      syscall_numbers.h \
 		      sysfs_fuse.c sysfs_fuse.h \
 		      utils.c utils.h
 liblxcfs_la_CFLAGS = $(AM_CFLAGS)
@@ -48,6 +49,7 @@ liblxcfstest_la_SOURCES = api_extensions.h \
 			  proc_cpuview.c proc_cpuview.h \
 			  proc_fuse.c proc_fuse.h \
 			  proc_loadavg.c proc_loadavg.h \
+			  syscall_numbers.h \
 			  sysfs_fuse.c sysfs_fuse.h \
 			  utils.c utils.h
 liblxcfstest_la_CFLAGS = $(AM_CFLAGS) -DRELOADTEST
@@ -75,6 +77,7 @@ noinst_HEADERS = api_extensions.h \
 		 proc_cpuview.h \
 		 proc_fuse.h \
 		 proc_loadavg.h \
+		 syscall_numbers.h \
 		 sysfs_fuse.h \
 		 utils.h
 
diff --git a/src/bindings.c b/src/bindings.c
index 115ea1f..6c3c818 100644
--- a/src/bindings.c
+++ b/src/bindings.c
@@ -46,6 +46,7 @@
 #include "config.h"
 #include "memory_utils.h"
 #include "proc_cpuview.h"
+#include "syscall_numbers.h"
 #include "utils.h"
 
 static bool can_use_pidfd;
@@ -61,12 +62,7 @@ bool liblxcfs_functional(void)
 #ifndef HAVE_PIVOT_ROOT
 static int pivot_root(const char *new_root, const char *put_old)
 {
-#ifdef __NR_pivot_root
 	return syscall(__NR_pivot_root, new_root, put_old);
-#else
-	errno = ENOSYS;
-	return -1;
-#endif
 }
 #else
 extern int pivot_root(const char *new_root, const char *put_old);
diff --git a/src/cgroups/cgroup2_devices.h b/src/cgroups/cgroup2_devices.h
index 3ba81ab..f7cc0ba 100644
--- a/src/cgroups/cgroup2_devices.h
+++ b/src/cgroups/cgroup2_devices.h
@@ -30,40 +30,15 @@
 #include <linux/filter.h>
 #endif
 
+#include "syscall_numbers.h"
+
 #if !HAVE_BPF
-#if !(defined __NR_bpf && __NR_bpf > 0)
-#if defined __NR_bpf
-#undef __NR_bpf
-#endif
-#if defined __i386__
-#define __NR_bpf 357
-#elif defined __x86_64__
-#define __NR_bpf 321
-#elif defined __aarch64__
-#define __NR_bpf 280
-#elif defined __arm__
-#define __NR_bpf 386
-#elif defined __sparc__
-#define __NR_bpf 349
-#elif defined __s390__
-#define __NR_bpf 351
-#elif defined __tilegx__
-#define __NR_bpf 280
-#else
-#warning "__NR_bpf not defined for your architecture"
-#endif
-#endif
 
 union bpf_attr;
 
 static inline int missing_bpf(int cmd, union bpf_attr *attr, size_t size)
 {
-#ifdef __NR_bpf
 	return (int)syscall(__NR_bpf, cmd, attr, size);
-#else
-	errno = ENOSYS;
-	return -1;
-#endif
 }
 
 #define bpf missing_bpf
@@ -77,7 +52,7 @@ struct bpf_program {
 	size_t n_instructions;
 #ifdef HAVE_STRUCT_BPF_CGROUP_DEV_CTX
 	struct bpf_insn *instructions;
-#endif
+#endif /* HAVE_STRUCT_BPF_CGROUP_DEV_CTX */
 
 	char *attached_path;
 	int attached_type;
@@ -102,7 +77,7 @@ static inline void __auto_bpf_program_free__(struct bpf_program **prog)
 		*prog = NULL;
 	}
 }
-#else
+#else /* HAVE_STRUCT_BPF_CGROUP_DEV_CTX */
 static inline struct bpf_program *bpf_program_new(uint32_t prog_type)
 {
 	errno = ENOSYS;
@@ -156,9 +131,8 @@ static inline void __auto_bpf_program_free__(struct bpf_program **prog)
 {
 }
 
-#endif
+#endif /* HAVE_BPF */
 
-#define __do_bpf_program_free \
-	__attribute__((__cleanup__(__auto_bpf_program_free__)))
+define_cleanup_function(struct bpf_program *, bpf_program_free);
 
 #endif /* __LXC_CGROUP2_DEVICES_H */
diff --git a/src/syscall_numbers.h b/src/syscall_numbers.h
new file mode 100644
index 0000000..1c1b29b
--- /dev/null
+++ b/src/syscall_numbers.h
@@ -0,0 +1,127 @@
+/* SPDX-License-Identifier: LGPL-2.1+ */
+#ifndef __LXCFS_SYSCALL_NUMBERS_H
+#define __LXCFS_SYSCALL_NUMBERS_H
+
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE 1
+#endif
+#include <asm/unistd.h>
+#include <errno.h>
+#include <linux/keyctl.h>
+#include <sched.h>
+#include <stdint.h>
+#include <sys/syscall.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#ifdef HAVE_LINUX_MEMFD_H
+#include <linux/memfd.h>
+#endif
+
+#ifdef HAVE_SYS_SIGNALFD_H
+#include <sys/signalfd.h>
+#endif
+
+#ifndef __NR_pivot_root
+	#if defined __i386__
+		#define __NR_pivot_root 217
+	#elif defined __x86_64__
+		#define __NR_pivot_root	155
+	#elif defined __arm__
+		#define __NR_pivot_root 218
+	#elif defined __aarch64__
+		#define __NR_pivot_root 218
+	#elif defined __s390__
+		#define __NR_pivot_root 217
+	#elif defined __powerpc__
+		#define __NR_pivot_root 203
+	#elif defined __sparc__
+		#define __NR_pivot_root 146
+	#elif defined __ia64__
+		#define __NR_pivot_root 183
+	#elif defined _MIPS_SIM
+		#if _MIPS_SIM == _MIPS_SIM_ABI32	/* o32 */
+			#define __NR_pivot_root 4216
+		#endif
+		#if _MIPS_SIM == _MIPS_SIM_NABI32	/* n32 */
+			#define __NR_pivot_root 6151
+		#endif
+		#if _MIPS_SIM == _MIPS_SIM_ABI64	/* n64 */
+			#define __NR_pivot_root 5151
+		#endif
+	#else
+		#define -1
+		#warning "__NR_pivot_root not defined for your architecture"
+	#endif
+#endif
+
+#ifndef __NR_bpf
+	#if defined __i386__
+		#define __NR_bpf 357
+	#elif defined __x86_64__
+		#define __NR_bpf 321
+	#elif defined __arm__
+		#define __NR_bpf 386
+	#elif defined __aarch64__
+		#define __NR_bpf 386
+	#elif defined __s390__
+		#define __NR_bpf 351
+	#elif defined __powerpc__
+		#define __NR_bpf 361
+	#elif defined __sparc__
+		#define __NR_bpf 349
+	#elif defined __ia64__
+		#define __NR_bpf 317
+	#elif defined _MIPS_SIM
+		#if _MIPS_SIM == _MIPS_SIM_ABI32	/* o32 */
+			#define __NR_bpf 4355
+		#endif
+		#if _MIPS_SIM == _MIPS_SIM_NABI32	/* n32 */
+			#define __NR_bpf 6319
+		#endif
+		#if _MIPS_SIM == _MIPS_SIM_ABI64	/* n64 */
+			#define __NR_bpf 5315
+		#endif
+	#else
+		#define -1
+		#warning "__NR_bpf not defined for your architecture"
+	#endif
+#endif
+
+#ifndef __NR_pidfd_send_signal
+	#if defined __alpha__
+		#define __NR_pidfd_send_signal 534
+	#elif defined _MIPS_SIM
+		#if _MIPS_SIM == _MIPS_SIM_ABI32	/* o32 */
+			#define __NR_pidfd_send_signal 4424
+		#endif
+		#if _MIPS_SIM == _MIPS_SIM_NABI32	/* n32 */
+			#define __NR_pidfd_send_signal 6424
+		#endif
+		#if _MIPS_SIM == _MIPS_SIM_ABI64	/* n64 */
+			#define __NR_pidfd_send_signal 5424
+		#endif
+	#else
+		#define __NR_pidfd_send_signal 424
+	#endif
+#endif
+
+#ifndef __NR_pidfd_open
+	#if defined __alpha__
+		#define __NR_pidfd_open 544
+	#elif defined _MIPS_SIM
+		#if _MIPS_SIM == _MIPS_SIM_ABI32	/* o32 */
+			#define __NR_pidfd_open 4434
+		#endif
+		#if _MIPS_SIM == _MIPS_SIM_NABI32	/* n32 */
+			#define __NR_pidfd_open 6434
+		#endif
+		#if _MIPS_SIM == _MIPS_SIM_ABI64	/* n64 */
+			#define __NR_pidfd_open 5434
+		#endif
+	#else
+		#define __NR_pidfd_open 434
+	#endif
+#endif
+
+#endif /* __LXCFS_SYSCALL_NUMBERS_H */
diff --git a/src/utils.h b/src/utils.h
index 29c87dc..9b8d867 100644
--- a/src/utils.h
+++ b/src/utils.h
@@ -24,6 +24,7 @@
 
 #include "config.h"
 #include "macro.h"
+#include "syscall_numbers.h"
 
 /* Reserve buffer size to account for file size changes. */
 #define BUF_RESERVE_SIZE 512
@@ -51,11 +52,7 @@ extern int wait_for_pid(pid_t pid);
 #ifndef HAVE_PIDFD_OPEN
 static inline int pidfd_open(pid_t pid, unsigned int flags)
 {
-#ifdef __NR_pidfd_open
 	return syscall(__NR_pidfd_open, pid, flags);
-#else
-	return ret_errno(ENOSYS);
-#endif
 }
 #endif
 
@@ -63,11 +60,7 @@ static inline int pidfd_open(pid_t pid, unsigned int flags)
 static inline int pidfd_send_signal(int pidfd, int sig, siginfo_t *info,
 				    unsigned int flags)
 {
-#ifdef __NR_pidfd_send_signal
 	return syscall(__NR_pidfd_send_signal, pidfd, sig, info, flags);
-#else
-	return ret_errno(ENOSYS);
-#endif
 }
 #endif
 


More information about the lxc-devel mailing list