mirror of
https://git.proxmox.com/git/mirror_lxc
synced 2025-08-14 16:46:21 +00:00
Merge pull request #2671 from brauner/2018-10-03/syscall_wrappers
syscalls: move wrappers and raw syscalls to appropriate files
This commit is contained in:
commit
0a886c56a7
@ -360,7 +360,8 @@ lxc_user_nic_SOURCES = cmd/lxc_user_nic.c \
|
||||
log.c log.h \
|
||||
network.c network.h \
|
||||
parse.c parse.h \
|
||||
raw_syscalls.c raw_syscalls.h
|
||||
raw_syscalls.c raw_syscalls.h \
|
||||
syscall_wrappers.h
|
||||
lxc_usernsexec_SOURCES = cmd/lxc_usernsexec.c \
|
||||
conf.c conf.h \
|
||||
list.h \
|
||||
@ -368,6 +369,7 @@ lxc_usernsexec_SOURCES = cmd/lxc_usernsexec.c \
|
||||
macro.h \
|
||||
file_utils.c file_utils.h \
|
||||
string_utils.c string_utils.h \
|
||||
syscall_wrappers.h \
|
||||
utils.c utils.h
|
||||
endif
|
||||
|
||||
|
@ -60,6 +60,7 @@
|
||||
#include "mainloop.h"
|
||||
#include "namespace.h"
|
||||
#include "raw_syscalls.h"
|
||||
#include "syscall_wrappers.h"
|
||||
#include "terminal.h"
|
||||
#include "utils.h"
|
||||
|
||||
|
@ -52,6 +52,7 @@
|
||||
#include "network.h"
|
||||
#include "parse.h"
|
||||
#include "raw_syscalls.h"
|
||||
#include "syscall_wrappers.h"
|
||||
#include "utils.h"
|
||||
|
||||
#ifndef HAVE_STRLCPY
|
||||
|
@ -49,6 +49,7 @@
|
||||
#include "macro.h"
|
||||
#include "file_utils.h"
|
||||
#include "string_utils.h"
|
||||
#include "syscall_wrappers.h"
|
||||
#include "utils.h"
|
||||
|
||||
extern int lxc_log_fd;
|
||||
|
@ -45,6 +45,7 @@
|
||||
#include "lxclock.h"
|
||||
#include "network.h"
|
||||
#include "storage.h"
|
||||
#include "syscall_wrappers.h"
|
||||
#include "utils.h"
|
||||
|
||||
#if IS_BIONIC
|
||||
|
@ -73,6 +73,7 @@
|
||||
#include "storage/overlay.h"
|
||||
#include "storage_utils.h"
|
||||
#include "sync.h"
|
||||
#include "syscall_wrappers.h"
|
||||
#include "terminal.h"
|
||||
#include "utils.h"
|
||||
#include "version.h"
|
||||
|
@ -57,6 +57,7 @@
|
||||
#include "network.h"
|
||||
#include "nl.h"
|
||||
#include "raw_syscalls.h"
|
||||
#include "syscall_wrappers.h"
|
||||
#include "utils.h"
|
||||
|
||||
#ifndef HAVE_STRLCPY
|
||||
|
@ -83,4 +83,13 @@ static inline pid_t lxc_raw_getpid(void)
|
||||
return (pid_t)syscall(SYS_getpid);
|
||||
}
|
||||
|
||||
static inline pid_t lxc_raw_gettid(void)
|
||||
{
|
||||
#ifdef __NR_gettid
|
||||
return syscall(__NR_gettid);
|
||||
#else
|
||||
return lxc_raw_getpid();
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif /* __LXC_RAW_SYSCALL_H */
|
||||
|
@ -32,6 +32,7 @@
|
||||
|
||||
#include "config.h"
|
||||
#include "ringbuf.h"
|
||||
#include "syscall_wrappers.h"
|
||||
#include "utils.h"
|
||||
|
||||
int lxc_ringbuf_create(struct lxc_ringbuf *buf, size_t size)
|
||||
|
@ -75,6 +75,7 @@
|
||||
#include "storage/storage.h"
|
||||
#include "storage/storage_utils.h"
|
||||
#include "sync.h"
|
||||
#include "syscall_wrappers.h"
|
||||
#include "terminal.h"
|
||||
#include "utils.h"
|
||||
|
||||
|
@ -38,6 +38,7 @@
|
||||
#include "nbd.h"
|
||||
#include "storage.h"
|
||||
#include "storage_utils.h"
|
||||
#include "syscall_wrappers.h"
|
||||
#include "utils.h"
|
||||
|
||||
#ifndef HAVE_STRLCPY
|
||||
|
@ -38,6 +38,7 @@
|
||||
#include "log.h"
|
||||
#include "rsync.h"
|
||||
#include "storage.h"
|
||||
#include "syscall_wrappers.h"
|
||||
#include "utils.h"
|
||||
|
||||
lxc_log_define(rsync, lxc);
|
||||
|
@ -48,6 +48,7 @@
|
||||
#include "parse.h"
|
||||
#include "storage.h"
|
||||
#include "storage_utils.h"
|
||||
#include "syscall_wrappers.h"
|
||||
#include "utils.h"
|
||||
|
||||
#ifndef HAVE_STRLCPY
|
||||
|
@ -24,7 +24,9 @@
|
||||
#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>
|
||||
@ -32,6 +34,14 @@
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#ifdef HAVE_LINUX_MEMFD_H
|
||||
#include <linux/memfd.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SYS_SIGNALFD_H
|
||||
#include <sys/signalfd.h>
|
||||
#endif
|
||||
|
||||
typedef int32_t key_serial_t;
|
||||
|
||||
#if !HAVE_KEYCTL
|
||||
@ -48,6 +58,50 @@ static inline long __keyctl(int cmd, unsigned long arg2, unsigned long arg3,
|
||||
#define keyctl __keyctl
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_MEMFD_CREATE
|
||||
static inline int memfd_create(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
|
||||
return syscall(__NR_memfd_create, name, flags);
|
||||
#else
|
||||
errno = ENOSYS;
|
||||
return -1;
|
||||
#endif
|
||||
}
|
||||
#else
|
||||
extern int memfd_create(const char *name, unsigned int flags);
|
||||
#endif
|
||||
|
||||
#if !HAVE_PIVOT_ROOT
|
||||
static int pivot_root(const char *new_root, const char *put_old)
|
||||
{
|
||||
@ -62,4 +116,138 @@ static int pivot_root(const char *new_root, const char *put_old)
|
||||
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
|
||||
|
||||
/* Define setns() if missing from the C library */
|
||||
#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
|
||||
|
||||
#ifndef HAVE_SYS_SIGNALFD_H
|
||||
struct signalfd_siginfo {
|
||||
uint32_t ssi_signo;
|
||||
int32_t ssi_errno;
|
||||
int32_t ssi_code;
|
||||
uint32_t ssi_pid;
|
||||
uint32_t ssi_uid;
|
||||
int32_t ssi_fd;
|
||||
uint32_t ssi_tid;
|
||||
uint32_t ssi_band;
|
||||
uint32_t ssi_overrun;
|
||||
uint32_t ssi_trapno;
|
||||
int32_t ssi_status;
|
||||
int32_t ssi_int;
|
||||
uint64_t ssi_ptr;
|
||||
uint64_t ssi_utime;
|
||||
uint64_t ssi_stime;
|
||||
uint64_t ssi_addr;
|
||||
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;
|
||||
|
||||
retval = syscall(__NR_signalfd4, fd, mask, _NSIG / 8, flags);
|
||||
if (errno == ENOSYS && flags == 0)
|
||||
retval = syscall(__NR_signalfd, fd, mask, _NSIG / 8);
|
||||
|
||||
return retval;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Define unshare() if missing from the C library */
|
||||
#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
|
||||
|
||||
#endif /* __LXC_SYSCALL_WRAPPER_H */
|
||||
|
@ -45,6 +45,7 @@
|
||||
#include "lxclock.h"
|
||||
#include "mainloop.h"
|
||||
#include "start.h"
|
||||
#include "syscall_wrappers.h"
|
||||
#include "terminal.h"
|
||||
#include "utils.h"
|
||||
|
||||
|
196
src/lxc/utils.h
196
src/lxc/utils.h
@ -43,10 +43,6 @@
|
||||
#include "raw_syscalls.h"
|
||||
#include "string_utils.h"
|
||||
|
||||
#ifdef HAVE_LINUX_MEMFD_H
|
||||
#include <linux/memfd.h>
|
||||
#endif
|
||||
|
||||
/* returns 1 on success, 0 if there were any failures */
|
||||
extern int lxc_rmdir_onedev(const char *path, const char *exclude);
|
||||
extern int get_u16(unsigned short *val, const char *arg, int base);
|
||||
@ -60,189 +56,6 @@ extern char *get_rundir(void);
|
||||
#endif
|
||||
#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 setns() if missing from the C library */
|
||||
#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
|
||||
|
||||
/* 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
|
||||
|
||||
/* Define unshare() if missing from the C library */
|
||||
#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 signalfd() if missing from the C library */
|
||||
#ifdef HAVE_SYS_SIGNALFD_H
|
||||
# include <sys/signalfd.h>
|
||||
#else
|
||||
/* assume kernel headers are too old */
|
||||
#include <stdint.h>
|
||||
struct signalfd_siginfo
|
||||
{
|
||||
uint32_t ssi_signo;
|
||||
int32_t ssi_errno;
|
||||
int32_t ssi_code;
|
||||
uint32_t ssi_pid;
|
||||
uint32_t ssi_uid;
|
||||
int32_t ssi_fd;
|
||||
uint32_t ssi_tid;
|
||||
uint32_t ssi_band;
|
||||
uint32_t ssi_overrun;
|
||||
uint32_t ssi_trapno;
|
||||
int32_t ssi_status;
|
||||
int32_t ssi_int;
|
||||
uint64_t ssi_ptr;
|
||||
uint64_t ssi_utime;
|
||||
uint64_t ssi_stime;
|
||||
uint64_t ssi_addr;
|
||||
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;
|
||||
|
||||
retval = syscall (__NR_signalfd4, fd, mask, _NSIG / 8, flags);
|
||||
if (errno == ENOSYS && flags == 0)
|
||||
retval = syscall (__NR_signalfd, fd, mask, _NSIG / 8);
|
||||
return retval;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_MEMFD_CREATE
|
||||
static inline int memfd_create(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
|
||||
return syscall(__NR_memfd_create, name, flags);
|
||||
#else
|
||||
errno = ENOSYS;
|
||||
return -1;
|
||||
#endif
|
||||
}
|
||||
#else
|
||||
extern int memfd_create(const char *name, unsigned int flags);
|
||||
#endif
|
||||
|
||||
static inline int lxc_set_cloexec(int fd)
|
||||
{
|
||||
return fcntl(fd, F_SETFD, FD_CLOEXEC);
|
||||
@ -424,15 +237,6 @@ static inline uint64_t lxc_getpagesize(void)
|
||||
*/
|
||||
extern uint64_t lxc_find_next_power2(uint64_t n);
|
||||
|
||||
static inline pid_t lxc_raw_gettid(void)
|
||||
{
|
||||
#ifdef SYS_gettid
|
||||
return syscall(SYS_gettid);
|
||||
#else
|
||||
return lxc_raw_getpid();
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Set a signal the child process will receive after the parent has died. */
|
||||
extern int lxc_set_death_signal(int signal, pid_t parent);
|
||||
extern int fd_cloexec(int fd, bool cloexec);
|
||||
|
Loading…
Reference in New Issue
Block a user