[lxc-devel] [lxc/master] tree-wide: introduce and use syscall number header
brauner on Github
lxc-bot at linuxcontainers.org
Wed Mar 18 09:45:21 UTC 2020
A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 488 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20200318/9dff3ae8/attachment-0001.bin>
-------------- next part --------------
From cf586b4186d4321d9ddfdf0e9c9e6ba42044ffae Mon Sep 17 00:00:00 2001
From: Christian Brauner <christian.brauner at ubuntu.com>
Date: Wed, 18 Mar 2020 10:43:44 +0100
Subject: [PATCH] tree-wide: introduce and use syscall number header
This allows us:
- to compile on kernels with outdated headers
- compile on older kernels but shipping on newer kernels
Signed-off-by: Christian Brauner <christian.brauner at ubuntu.com>
---
src/lxc/Makefile.am | 6 +
src/lxc/cgroups/cgroup2_devices.h | 40 +--
src/lxc/lxccontainer.c | 13 -
src/lxc/raw_syscalls.c | 12 +-
src/lxc/raw_syscalls.h | 2 +-
src/lxc/seccomp.c | 5 -
src/lxc/syscall_numbers.h | 478 ++++++++++++++++++++++++++++++
src/lxc/syscall_wrappers.h | 135 +--------
src/lxc/tools/lxc_unshare.c | 20 +-
9 files changed, 506 insertions(+), 205 deletions(-)
create mode 100644 src/lxc/syscall_numbers.h
diff --git a/src/lxc/Makefile.am b/src/lxc/Makefile.am
index 2f850135a7..1c2f92a67d 100644
--- a/src/lxc/Makefile.am
+++ b/src/lxc/Makefile.am
@@ -43,6 +43,7 @@ noinst_HEADERS = api_extensions.h \
storage/storage_utils.h \
storage/zfs.h \
string_utils.h \
+ syscall_numbers.h \
syscall_wrappers.h \
terminal.h \
../tests/lxctest.h \
@@ -145,6 +146,7 @@ liblxc_la_SOURCES = af_unix.c af_unix.h \
storage/zfs.c storage/zfs.h \
string_utils.c string_utils.h \
sync.c sync.h \
+ syscall_numbers.h \
syscall_wrappers.h \
terminal.c \
utils.c utils.h \
@@ -360,6 +362,7 @@ lxc_top_SOURCES = tools/lxc_top.c \
lxc_unfreeze_SOURCES = tools/lxc_unfreeze.c \
tools/arguments.c tools/arguments.h
lxc_unshare_SOURCES = tools/lxc_unshare.c \
+ syscall_numbers.h \
tools/arguments.c tools/arguments.h
lxc_wait_SOURCES = tools/lxc_wait.c \
tools/arguments.c tools/arguments.h
@@ -381,6 +384,7 @@ init_lxc_SOURCES = cmd/lxc_init.c \
memory_utils.h \
parse.c parse.h \
raw_syscalls.c raw_syscalls.h \
+ syscall_numbers.h \
string_utils.c string_utils.h
init_lxc_LDFLAGS = -pthread
@@ -391,6 +395,7 @@ lxc_monitord_SOURCES = cmd/lxc_monitord.c \
mainloop.c mainloop.h \
monitor.c monitor.h \
raw_syscalls.c raw_syscalls.h \
+ syscall_numbers.h \
utils.c utils.h
lxc_user_nic_SOURCES = cmd/lxc_user_nic.c \
../include/netns_ifaddrs.c ../include/netns_ifaddrs.h \
@@ -399,6 +404,7 @@ lxc_user_nic_SOURCES = cmd/lxc_user_nic.c \
network.c network.h \
parse.c parse.h \
raw_syscalls.c raw_syscalls.h \
+ syscall_numbers.h \
file_utils.c file_utils.h \
string_utils.c string_utils.h \
syscall_wrappers.h
diff --git a/src/lxc/cgroups/cgroup2_devices.h b/src/lxc/cgroups/cgroup2_devices.h
index de37cd40ea..5c848d81e5 100644
--- a/src/lxc/cgroups/cgroup2_devices.h
+++ b/src/lxc/cgroups/cgroup2_devices.h
@@ -17,50 +17,24 @@
#include "conf.h"
#include "config.h"
+#include "syscall_numbers.h"
#ifdef HAVE_STRUCT_BPF_CGROUP_DEV_CTX
#include <linux/bpf.h>
#include <linux/filter.h>
#endif
-#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
+#ifndef HAVE_BPF
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
+ return syscall(__NR_bpf, cmd, attr, size);
}
#define bpf missing_bpf
-#endif
+#endif /* HAVE_BPF */
struct bpf_program {
int device_list_type;
@@ -70,7 +44,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;
@@ -97,7 +71,7 @@ static inline void __auto_bpf_program_free__(struct bpf_program **prog)
}
}
int bpf_list_add_device(struct lxc_conf *conf, struct device_item *device);
-#else
+#else /* !HAVE_STRUCT_BPF_CGROUP_DEV_CTX */
static inline struct bpf_program *bpf_program_new(uint32_t prog_type)
{
errno = ENOSYS;
@@ -160,7 +134,7 @@ static inline int bpf_list_add_device(struct lxc_conf *conf,
errno = ENOSYS;
return -1;
}
-#endif
+#endif /* !HAVE_STRUCT_BPF_CGROUP_DEV_CTX */
#define __do_bpf_program_free \
__attribute__((__cleanup__(__auto_bpf_program_free__)))
diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c
index 55eaf50b3f..b30864bb54 100644
--- a/src/lxc/lxccontainer.c
+++ b/src/lxc/lxccontainer.c
@@ -81,19 +81,6 @@
#include "include/strlcpy.h"
#endif
-/* Define faccessat() if missing from the C library */
-#ifndef HAVE_FACCESSAT
-static int faccessat(int __fd, const char *__file, int __type, int __flag)
-{
-#ifdef __NR_faccessat
- return syscall(__NR_faccessat, __fd, __file, __type, __flag);
-#else
- errno = ENOSYS;
- return -1;
-#endif
-}
-#endif
-
lxc_log_define(lxccontainer, lxc);
static bool do_lxcapi_destroy(struct lxc_container *c);
diff --git a/src/lxc/raw_syscalls.c b/src/lxc/raw_syscalls.c
index d30b938633..3e76f17a59 100644
--- a/src/lxc/raw_syscalls.c
+++ b/src/lxc/raw_syscalls.c
@@ -19,12 +19,7 @@
int lxc_raw_execveat(int dirfd, const char *pathname, char *const argv[],
char *const envp[], int flags)
{
-#ifdef __NR_execveat
- syscall(__NR_execveat, dirfd, pathname, argv, envp, flags);
-#else
- errno = ENOSYS;
-#endif
- return -1;
+ return syscall(__NR_execveat, dirfd, pathname, argv, envp, flags);
}
/*
@@ -123,11 +118,6 @@ pid_t lxc_raw_clone_cb(int (*fn)(void *), void *args, unsigned long flags,
return pid;
}
-/* For all the architectures we care about it's the same syscall number. */
-#ifndef __NR_pidfd_send_signal
-#define __NR_pidfd_send_signal 424
-#endif
-
int lxc_raw_pidfd_send_signal(int pidfd, int sig, siginfo_t *info,
unsigned int flags)
{
diff --git a/src/lxc/raw_syscalls.h b/src/lxc/raw_syscalls.h
index 0a35408d8e..1219f28f43 100644
--- a/src/lxc/raw_syscalls.h
+++ b/src/lxc/raw_syscalls.h
@@ -81,7 +81,7 @@ static inline pid_t lxc_raw_getpid(void)
static inline pid_t lxc_raw_gettid(void)
{
-#ifdef __NR_gettid
+#if __NR_gettid > 0
return syscall(__NR_gettid);
#else
return lxc_raw_getpid();
diff --git a/src/lxc/seccomp.c b/src/lxc/seccomp.c
index 6aedb5274d..916b1aa1a8 100644
--- a/src/lxc/seccomp.c
+++ b/src/lxc/seccomp.c
@@ -38,12 +38,7 @@ lxc_log_define(seccomp, lxc);
static inline int __seccomp(unsigned int operation, unsigned int flags,
void *args)
{
-#ifdef __NR_seccomp
return syscall(__NR_seccomp, operation, flags, args);
-#else
- errno = ENOSYS;
- return -1;
-#endif
}
#endif
diff --git a/src/lxc/syscall_numbers.h b/src/lxc/syscall_numbers.h
new file mode 100644
index 0000000000..42609d43fa
--- /dev/null
+++ b/src/lxc/syscall_numbers.h
@@ -0,0 +1,478 @@
+/* SPDX-License-Identifier: LGPL-2.1+ */
+#ifndef __LXC_SYSCALL_NUMBERS_H
+#define __LXC_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_keyctl
+ #if defined __i386__
+ #define __NR_keyctl 288
+ #elif defined __x86_64__
+ #define __NR_keyctl 250
+ #elif defined __arm__
+ #define __NR_keyctl 311
+ #elif defined __aarch64__
+ #define __NR_keyctl 311
+ #elif defined __s390__
+ #define __NR_keyctl 280
+ #elif defined __powerpc__
+ #define __NR_keyctl 271
+ #elif defined __sparc__
+ #define __NR_keyctl 283
+ #elif defined __ia64__
+ #define __NR_keyctl 249
+ #elif defined _MIPS_SIM
+ #if _MIPS_SIM == _MIPS_SIM_ABI32 /* o32 */
+ #define __NR_keyctl 4282
+ #endif
+ #if _MIPS_SIM == _MIPS_SIM_NABI32 /* n32 */
+ #define __NR_keyctl 6245
+ #endif
+ #if _MIPS_SIM == _MIPS_SIM_ABI64 /* n64 */
+ #define __NR_keyctl 5241
+ #endif
+ #else
+ #define -1
+ #warning "__NR_keyctl not defined for your architecture"
+ #endif
+#endif
+
+#ifndef __NR_memfd_create
+ #if defined __i386__
+ #define __NR_memfd_create 356
+ #elif defined __x86_64__
+ #define __NR_memfd_create 319
+ #elif defined __arm__
+ #define __NR_memfd_create 385
+ #elif defined __aarch64__
+ #define __NR_memfd_create 279
+ #elif defined __s390__
+ #define __NR_memfd_create 350
+ #elif defined __powerpc__
+ #define __NR_memfd_create 360
+ #elif defined __sparc__
+ #define __NR_memfd_create 348
+ #elif defined __blackfin__
+ #define __NR_memfd_create 390
+ #elif defined __ia64__
+ #define __NR_memfd_create 1340
+ #elif defined _MIPS_SIM
+ #if _MIPS_SIM == _MIPS_SIM_ABI32
+ #define __NR_memfd_create 4354
+ #endif
+ #if _MIPS_SIM == _MIPS_SIM_NABI32
+ #define __NR_memfd_create 6318
+ #endif
+ #if _MIPS_SIM == _MIPS_SIM_ABI64
+ #define __NR_memfd_create 5314
+ #endif
+ #else
+ #define -1
+ #warning "__NR_memfd_create not defined for your architecture"
+ #endif
+#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_setns
+ #if defined __i386__
+ #define __NR_setns 346
+ #elif defined __x86_64__
+ #define __NR_setns 308
+ #elif defined __arm__
+ #define __NR_setns 375
+ #elif defined __aarch64__
+ #define __NR_setns 375
+ #elif defined __s390__
+ #define __NR_setns 339
+ #elif defined __powerpc__
+ #define __NR_setns 350
+ #elif defined __sparc__
+ #define __NR_setns 337
+ #elif defined __ia64__
+ #define __NR_setns 306
+ #elif defined _MIPS_SIM
+ #if _MIPS_SIM == _MIPS_SIM_ABI32 /* o32 */
+ #define __NR_setns 4344
+ #endif
+ #if _MIPS_SIM == _MIPS_SIM_NABI32 /* n32 */
+ #define __NR_setns 6308
+ #endif
+ #if _MIPS_SIM == _MIPS_SIM_ABI64 /* n64 */
+ #define __NR_setns 5303
+ #endif
+ #else
+ #define -1
+ #warning "__NR_setns not defined for your architecture"
+ #endif
+#endif
+
+#ifndef __NR_sethostname
+ #if defined __i386__
+ #define __NR_sethostname 74
+ #elif defined __x86_64__
+ #define __NR_sethostname 170
+ #elif defined __arm__
+ #define __NR_sethostname 74
+ #elif defined __aarch64__
+ #define __NR_sethostname 74
+ #elif defined __s390__
+ #define __NR_sethostname 74
+ #elif defined __powerpc__
+ #define __NR_sethostname 74
+ #elif defined __sparc__
+ #define __NR_sethostname 88
+ #elif defined __ia64__
+ #define __NR_sethostname 59
+ #elif defined _MIPS_SIM
+ #if _MIPS_SIM == _MIPS_SIM_ABI32 /* o32 */
+ #define __NR_sethostname 474
+ #endif
+ #if _MIPS_SIM == _MIPS_SIM_NABI32 /* n32 */
+ #define __NR_sethostname 6165
+ #endif
+ #if _MIPS_SIM == _MIPS_SIM_ABI64 /* n64 */
+ #define __NR_sethostname 5165
+ #endif
+ #else
+ #define -1
+ #warning "__NR_sethostname not defined for your architecture"
+ #endif
+#endif
+
+#ifndef __NR_signalfd
+ #if defined __i386__
+ #define __NR_signalfd 321
+ #elif defined __x86_64__
+ #define __NR_signalfd 282
+ #elif defined __arm__
+ #define __NR_signalfd 349
+ #elif defined __aarch64__
+ #define __NR_signalfd 349
+ #elif defined __s390__
+ #define __NR_signalfd 316
+ #elif defined __powerpc__
+ #define __NR_signalfd 305
+ #elif defined __sparc__
+ #define __NR_signalfd 311
+ #elif defined __ia64__
+ #define __NR_signalfd 283
+ #elif defined _MIPS_SIM
+ #if _MIPS_SIM == _MIPS_SIM_ABI32 /* o32 */
+ #define __NR_signalfd 4317
+ #endif
+ #if _MIPS_SIM == _MIPS_SIM_NABI32 /* n32 */
+ #define __NR_signalfd 6280
+ #endif
+ #if _MIPS_SIM == _MIPS_SIM_ABI64 /* n64 */
+ #define __NR_signalfd 5276
+ #endif
+ #else
+ #define -1
+ #warning "__NR_signalfd not defined for your architecture"
+ #endif
+#endif
+
+#ifndef __NR_signalfd4
+ #if defined __i386__
+ #define __NR_signalfd4 327
+ #elif defined __x86_64__
+ #define __NR_signalfd4 289
+ #elif defined __arm__
+ #define __NR_signalfd4 355
+ #elif defined __aarch64__
+ #define __NR_signalfd4 355
+ #elif defined __s390__
+ #define __NR_signalfd4 322
+ #elif defined __powerpc__
+ #define __NR_signalfd4 313
+ #elif defined __sparc__
+ #define __NR_signalfd4 317
+ #elif defined __ia64__
+ #define __NR_signalfd4 289
+ #elif defined _MIPS_SIM
+ #if _MIPS_SIM == _MIPS_SIM_ABI32 /* o32 */
+ #define __NR_signalfd4 4324
+ #endif
+ #if _MIPS_SIM == _MIPS_SIM_NABI32 /* n32 */
+ #define __NR_signalfd4 6287
+ #endif
+ #if _MIPS_SIM == _MIPS_SIM_ABI64 /* n64 */
+ #define __NR_signalfd4 5283
+ #endif
+ #else
+ #define -1
+ #warning "__NR_signalfd4 not defined for your architecture"
+ #endif
+#endif
+
+#ifndef __NR_unshare
+ #if defined __i386__
+ #define __NR_unshare 310
+ #elif defined __x86_64__
+ #define __NR_unshare 272
+ #elif defined __arm__
+ #define __NR_unshare 337
+ #elif defined __aarch64__
+ #define __NR_unshare 337
+ #elif defined __s390__
+ #define __NR_unshare 303
+ #elif defined __powerpc__
+ #define __NR_unshare 282
+ #elif defined __sparc__
+ #define __NR_unshare 299
+ #elif defined __ia64__
+ #define __NR_unshare 272
+ #elif defined _MIPS_SIM
+ #if _MIPS_SIM == _MIPS_SIM_ABI32 /* o32 */
+ #define __NR_unshare 4303
+ #endif
+ #if _MIPS_SIM == _MIPS_SIM_NABI32 /* n32 */
+ #define __NR_unshare 6266
+ #endif
+ #if _MIPS_SIM == _MIPS_SIM_ABI64 /* n64 */
+ #define __NR_unshare 5262
+ #endif
+ #else
+ #define -1
+ #warning "__NR_unshare 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_faccessat
+ #if defined __i386__
+ #define __NR_faccessat 307
+ #elif defined __x86_64__
+ #define __NR_faccessat 269
+ #elif defined __arm__
+ #define __NR_faccessat 334
+ #elif defined __aarch64__
+ #define __NR_faccessat 334
+ #elif defined __s390__
+ #define __NR_faccessat 300
+ #elif defined __powerpc__
+ #define __NR_faccessat 298
+ #elif defined __sparc__
+ #define __NR_faccessat 296
+ #elif defined __ia64__
+ #define __NR_faccessat 269
+ #elif defined _MIPS_SIM
+ #if _MIPS_SIM == _MIPS_SIM_ABI32 /* o32 */
+ #define __NR_faccessat 4300
+ #endif
+ #if _MIPS_SIM == _MIPS_SIM_NABI32 /* n32 */
+ #define __NR_faccessat 6263
+ #endif
+ #if _MIPS_SIM == _MIPS_SIM_ABI64 /* n64 */
+ #define __NR_faccessat 5259
+ #endif
+ #else
+ #define -1
+ #warning "__NR_faccessat 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_seccomp
+ #if defined __i386__
+ #define __NR_seccomp 354
+ #elif defined __x86_64__
+ #define __NR_seccomp 317
+ #elif defined __arm__
+ #define __NR_seccomp 383
+ #elif defined __aarch64__
+ #define __NR_seccomp 383
+ #elif defined __s390__
+ #define __NR_seccomp 348
+ #elif defined __powerpc__
+ #define __NR_seccomp 358
+ #elif defined __sparc__
+ #define __NR_seccomp 346
+ #elif defined __ia64__
+ #define __NR_seccomp 329
+ #elif defined _MIPS_SIM
+ #if _MIPS_SIM == _MIPS_SIM_ABI32 /* o32 */
+ #define __NR_seccomp 4352
+ #endif
+ #if _MIPS_SIM == _MIPS_SIM_NABI32 /* n32 */
+ #define __NR_seccomp 6316
+ #endif
+ #if _MIPS_SIM == _MIPS_SIM_ABI64 /* n64 */
+ #define __NR_seccomp 5312
+ #endif
+ #else
+ #define -1
+ #warning "__NR_seccomp not defined for your architecture"
+ #endif
+#endif
+
+#ifndef __NR_gettid
+ #if defined __i386__
+ #define __NR_gettid 224
+ #elif defined __x86_64__
+ #define __NR_gettid 186
+ #elif defined __arm__
+ #define __NR_gettid 224
+ #elif defined __aarch64__
+ #define __NR_gettid 224
+ #elif defined __s390__
+ #define __NR_gettid 236
+ #elif defined __powerpc__
+ #define __NR_gettid 207
+ #elif defined __sparc__
+ #define __NR_gettid 143
+ #elif defined __ia64__
+ #define __NR_gettid 81
+ #elif defined _MIPS_SIM
+ #if _MIPS_SIM == _MIPS_SIM_ABI32 /* o32 */
+ #define __NR_gettid 4222
+ #endif
+ #if _MIPS_SIM == _MIPS_SIM_NABI32 /* n32 */
+ #define __NR_gettid 6178
+ #endif
+ #if _MIPS_SIM == _MIPS_SIM_ABI64 /* n64 */
+ #define __NR_gettid 5178
+ #endif
+ #else
+ #define -1
+ #warning "__NR_gettid not defined for your architecture"
+ #endif
+#endif
+
+#ifndef __NR_execveat
+ #if defined __i386__
+ #define __NR_execveat 358
+ #elif defined __x86_64__
+ #ifdef __ILP32__ /* x32 */
+ #define __NR_execveat 545
+ #else
+ #define __NR_execveat 322
+ #endif
+ #elif defined __arm__
+ #define __NR_execveat 387
+ #elif defined __aarch64__
+ #define __NR_execveat 387
+ #elif defined __s390__
+ #define __NR_execveat 354
+ #elif defined __powerpc__
+ #define __NR_execveat 362
+ #elif defined __sparc__
+ #define __NR_execveat 350
+ #elif defined __ia64__
+ #define __NR_execveat 318
+ #elif defined _MIPS_SIM
+ #if _MIPS_SIM == _MIPS_SIM_ABI32 /* o32 */
+ #define __NR_execveat 4356
+ #endif
+ #if _MIPS_SIM == _MIPS_SIM_NABI32 /* n32 */
+ #define __NR_execveat 6320
+ #endif
+ #if _MIPS_SIM == _MIPS_SIM_ABI64 /* n64 */
+ #define __NR_execveat 5316
+ #endif
+ #else
+ #define -1
+ #warning "__NR_execveat not defined for your architecture"
+ #endif
+#endif
+
+#endif /* __LXC_SYSCALL_NUMBERS_H */
diff --git a/src/lxc/syscall_wrappers.h b/src/lxc/syscall_wrappers.h
index 5d26432ce9..1cef21585c 100644
--- a/src/lxc/syscall_wrappers.h
+++ b/src/lxc/syscall_wrappers.h
@@ -16,6 +16,7 @@
#include <unistd.h>
#include "config.h"
+#include "syscall_numbers.h"
#ifdef HAVE_LINUX_MEMFD_H
#include <linux/memfd.h>
@@ -31,12 +32,7 @@ typedef int32_t key_serial_t;
static inline long __keyctl(int cmd, unsigned long arg2, unsigned long arg3,
unsigned long arg4, unsigned long arg5)
{
-#ifdef __NR_keyctl
return syscall(__NR_keyctl, cmd, arg2, arg3, arg4, arg5);
-#else
- errno = ENOSYS;
- return -1;
-#endif
}
#define keyctl __keyctl
#endif
@@ -56,90 +52,29 @@ static inline long __keyctl(int cmd, unsigned long arg2, unsigned long arg3,
#endif
#ifndef HAVE_MEMFD_CREATE
-static inline int memfd_create_lxc(const char *name, unsigned int flags) {
- #ifndef __NR_memfd_create
- #if defined __i386__
- #define __NR_memfd_create 356
- #elif defined __x86_64__
- #define __NR_memfd_create 319
- #elif defined __arm__
- #define __NR_memfd_create 385
- #elif defined __aarch64__
- #define __NR_memfd_create 279
- #elif defined __s390__
- #define __NR_memfd_create 350
- #elif defined __powerpc__
- #define __NR_memfd_create 360
- #elif defined __sparc__
- #define __NR_memfd_create 348
- #elif defined __blackfin__
- #define __NR_memfd_create 390
- #elif defined __ia64__
- #define __NR_memfd_create 1340
- #elif defined _MIPS_SIM
- #if _MIPS_SIM == _MIPS_SIM_ABI32
- #define __NR_memfd_create 4354
- #endif
- #if _MIPS_SIM == _MIPS_SIM_NABI32
- #define __NR_memfd_create 6318
- #endif
- #if _MIPS_SIM == _MIPS_SIM_ABI64
- #define __NR_memfd_create 5314
- #endif
- #endif
- #endif
- #ifdef __NR_memfd_create
+static inline int memfd_create_lxc(const char *name, unsigned int flags)
+{
return syscall(__NR_memfd_create, name, flags);
- #else
- errno = ENOSYS;
- return -1;
- #endif
}
#define memfd_create memfd_create_lxc
#else
extern int memfd_create(const char *name, unsigned int flags);
#endif
-#if !HAVE_PIVOT_ROOT
+#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);
#endif
-#if !defined(__NR_setns) && !defined(__NR_set_ns)
- #if defined(__x86_64__)
- #define __NR_setns 308
- #elif defined(__i386__)
- #define __NR_setns 346
- #elif defined(__arm__)
- #define __NR_setns 375
- #elif defined(__aarch64__)
- #define __NR_setns 375
- #elif defined(__powerpc__)
- #define __NR_setns 350
- #elif defined(__s390__)
- #define __NR_setns 339
- #endif
-#endif
-
/* Define sethostname() if missing from the C library */
#ifndef HAVE_SETHOSTNAME
static inline int sethostname(const char *name, size_t len)
{
-#ifdef __NR_sethostname
return syscall(__NR_sethostname, name, len);
-#else
- errno = ENOSYS;
- return -1;
-#endif
}
#endif
@@ -147,14 +82,7 @@ static inline int sethostname(const char *name, size_t len)
#ifndef HAVE_SETNS
static inline int setns(int fd, int nstype)
{
-#ifdef __NR_setns
return syscall(__NR_setns, fd, nstype);
-#elif defined(__NR_set_ns)
- return syscall(__NR_set_ns, fd, nstype);
-#else
- errno = ENOSYS;
- return -1;
-#endif
}
#endif
@@ -179,48 +107,6 @@ struct signalfd_siginfo {
uint8_t __pad[48];
};
-#ifndef __NR_signalfd4
-/* assume kernel headers are too old */
-#if __i386__
-#define __NR_signalfd4 327
-#elif __x86_64__
-#define __NR_signalfd4 289
-#elif __powerpc__
-#define __NR_signalfd4 313
-#elif __s390x__
-#define __NR_signalfd4 322
-#elif __arm__
-#define __NR_signalfd4 355
-#elif __mips__ && _MIPS_SIM == _ABIO32
-#define __NR_signalfd4 4324
-#elif __mips__ && _MIPS_SIM == _ABI64
-#define __NR_signalfd4 5283
-#elif __mips__ && _MIPS_SIM == _ABIN32
-#define __NR_signalfd4 6287
-#endif
-#endif
-
-#ifndef __NR_signalfd
-/* assume kernel headers are too old */
-#if __i386__
-#define __NR_signalfd 321
-#elif __x86_64__
-#define __NR_signalfd 282
-#elif __powerpc__
-#define __NR_signalfd 305
-#elif __s390x__
-#define __NR_signalfd 316
-#elif __arm__
-#define __NR_signalfd 349
-#elif __mips__ && _MIPS_SIM == _ABIO32
-#define __NR_signalfd 4317
-#elif __mips__ && _MIPS_SIM == _ABI64
-#define __NR_signalfd 5276
-#elif __mips__ && _MIPS_SIM == _ABIN32
-#define __NR_signalfd 6280
-#endif
-#endif
-
static inline int signalfd(int fd, const sigset_t *mask, int flags)
{
int retval;
@@ -237,15 +123,18 @@ static inline int signalfd(int fd, const sigset_t *mask, int flags)
#ifndef HAVE_UNSHARE
static inline int unshare(int flags)
{
-#ifdef __NR_unshare
return syscall(__NR_unshare, flags);
-#else
- errno = ENOSYS;
- return -1;
-#endif
}
#else
extern int unshare(int);
#endif
+/* Define faccessat() if missing from the C library */
+#ifndef HAVE_FACCESSAT
+static int faccessat(int __fd, const char *__file, int __type, int __flag)
+{
+ return syscall(__NR_faccessat, __fd, __file, __type, __flag);
+}
+#endif
+
#endif /* __LXC_SYSCALL_WRAPPER_H */
diff --git a/src/lxc/tools/lxc_unshare.c b/src/lxc/tools/lxc_unshare.c
index 0225a88c63..2cca827acb 100644
--- a/src/lxc/tools/lxc_unshare.c
+++ b/src/lxc/tools/lxc_unshare.c
@@ -41,7 +41,6 @@ struct start_arg {
};
static int my_parser(struct lxc_arguments *args, int c, char *arg);
-static inline int sethostname_including_android(const char *name, size_t len);
static int get_namespace_flags(char *namespaces);
static bool lookup_user(const char *oparg, uid_t *uid);
static int mount_fs(const char *source, const char *target, const char *type);
@@ -129,23 +128,6 @@ static int my_parser(struct lxc_arguments *args, int c, char *arg)
return 0;
}
-/* Define sethostname() if missing from the C library also workaround some
- * quirky with having this defined in multiple places.
- */
-static inline int sethostname_including_android(const char *name, size_t len)
-{
-#ifndef HAVE_SETHOSTNAME
-#ifdef __NR_sethostname
- return syscall(__NR_sethostname, name, len);
-#else
- errno = ENOSYS;
- return -1;
-#endif
-#else
- return sethostname(name, len);
-#endif
-}
-
static int get_namespace_flags(char *namespaces)
{
int flags = 0;
@@ -266,7 +248,7 @@ static int do_start(void *arg)
lxc_setup_fs();
if ((start_arg->flags & CLONE_NEWUTS) && want_hostname)
- if (sethostname_including_android(want_hostname, strlen(want_hostname)) < 0) {
+ if (sethostname(want_hostname, strlen(want_hostname)) < 0) {
SYSERROR("Failed to set hostname %s", want_hostname);
_exit(EXIT_FAILURE);
}
More information about the lxc-devel
mailing list