[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