Skip to content

Commit

Permalink
criu: fix conflicting headers
Browse files Browse the repository at this point in the history
There are several changes in glibc 2.36 that make sys/mount.h header
incompatible with kernel headers:

https://sourceware.org/glibc/wiki/Release/2.36#Usage_of_.3Clinux.2Fmount.h.3E_and_.3Csys.2Fmount.h.3E

This patch removes conflicting includes for `<linux/mount.h>` and
updates the content of `criu/include/linux/mount.h` to match
`/usr/include/sys/mount.h`. In addition, inline definitions sys_*()
functions have been moved from "linux/mount.h" to "syscall.h" to
avoid conflicts with `uapi/compel/plugins/std/syscall.h` and
`<unistd.h>`. The include for `<linux/aio_abi.h>` has been replaced
with local include to avoid conflicts with `<sys/mount.h>`.

Fixes: #1949

Signed-off-by: Radostin Stoyanov <rstoyanov@fedoraproject.org>
  • Loading branch information
rst0git committed Aug 5, 2022
1 parent f32e626 commit 4c86d6a
Show file tree
Hide file tree
Showing 11 changed files with 64 additions and 41 deletions.
2 changes: 1 addition & 1 deletion Makefile.config
Expand Up @@ -78,7 +78,7 @@ export DEFINES += $(FEATURE_DEFINES)
export CFLAGS += $(FEATURE_DEFINES)

FEATURES_LIST := TCP_REPAIR STRLCPY STRLCAT PTRACE_PEEKSIGINFO \
SETPROCTITLE_INIT MEMFD TCP_REPAIR_WINDOW FSCONFIG MEMFD_CREATE \
SETPROCTITLE_INIT MEMFD TCP_REPAIR_WINDOW MEMFD_CREATE \
OPENAT2 NO_LIBC_RSEQ_DEFS

# $1 - config name
Expand Down
1 change: 1 addition & 0 deletions criu/cgroup.c
Expand Up @@ -27,6 +27,7 @@
#include "images/cgroup.pb-c.h"
#include "kerndat.h"
#include "linux/mount.h"
#include "syscall.h"

/*
* This structure describes set of controller groups
Expand Down
2 changes: 1 addition & 1 deletion criu/cr-check.c
Expand Up @@ -21,7 +21,6 @@
#include <sys/prctl.h>
#include <sched.h>
#include <sys/mount.h>
#include <linux/aio_abi.h>

#include "../soccr/soccr.h"

Expand Down Expand Up @@ -52,6 +51,7 @@
#include "net.h"
#include "restorer.h"
#include "uffd.h"
#include "linux/aio_abi.h"

#include "images/inventory.pb-c.h"

Expand Down
3 changes: 2 additions & 1 deletion criu/cr-restore.c
Expand Up @@ -22,7 +22,6 @@
#include <compel/ptrace.h>
#include "common/compiler.h"

#include "linux/mount.h"
#include "linux/rseq.h"

#include "clone-noasan.h"
Expand Down Expand Up @@ -86,6 +85,8 @@
#include <compel/plugins/std/syscall-codes.h>
#include "compel/include/asm/syscall.h"

#include "linux/mount.h"

#include "protobuf.h"
#include "images/sa.pb-c.h"
#include "images/timer.pb-c.h"
Expand Down
2 changes: 1 addition & 1 deletion criu/include/aio.h
@@ -1,7 +1,7 @@
#ifndef __CR_AIO_H__
#define __CR_AIO_H__

#include <linux/aio_abi.h>
#include "linux/aio_abi.h"
#include "images/mm.pb-c.h"
unsigned int aio_estimate_nr_reqs(unsigned int size);
int dump_aio_ring(MmEntry *mme, struct vma_area *vma);
Expand Down
14 changes: 14 additions & 0 deletions criu/include/linux/aio_abi.h
@@ -0,0 +1,14 @@
#ifndef __LINUX__AIO_ABI_H
#define __LINUX__AIO_ABI_H

typedef __kernel_ulong_t aio_context_t;

/* read() from /dev/aio returns these structures. */
struct io_event {
__u64 data; /* the data field from the iocb */
__u64 obj; /* what iocb this event came from */
__s64 res; /* result code for this event */
__s64 res2; /* secondary result */
};

#endif /* __LINUX__AIO_ABI_H */
48 changes: 25 additions & 23 deletions criu/include/linux/mount.h
Expand Up @@ -4,32 +4,34 @@
#include "common/config.h"
#include "compel/plugins/std/syscall-codes.h"

#ifdef CONFIG_HAS_FSCONFIG
#include <linux/mount.h>
#else
/* Copied from /usr/include/sys/mount.h */

#ifndef FSCONFIG_CMD_CREATE
/* The type of fsconfig call made. */
enum fsconfig_command {
FSCONFIG_SET_FLAG = 0, /* Set parameter, supplying no value */
FSCONFIG_SET_STRING = 1, /* Set parameter, supplying a string value */
FSCONFIG_SET_BINARY = 2, /* Set parameter, supplying a binary blob value */
FSCONFIG_SET_PATH = 3, /* Set parameter, supplying an object by path */
FSCONFIG_SET_PATH_EMPTY = 4, /* Set parameter, supplying an object by (empty) path */
FSCONFIG_SET_FD = 5, /* Set parameter, supplying an object by fd */
FSCONFIG_CMD_CREATE = 6, /* Invoke superblock creation */
FSCONFIG_SET_FLAG = 0, /* Set parameter, supplying no value */
#define FSCONFIG_SET_FLAG FSCONFIG_SET_FLAG
FSCONFIG_SET_STRING = 1, /* Set parameter, supplying a string value */
#define FSCONFIG_SET_STRING FSCONFIG_SET_STRING
FSCONFIG_SET_BINARY = 2, /* Set parameter, supplying a binary blob value */
#define FSCONFIG_SET_BINARY FSCONFIG_SET_BINARY
FSCONFIG_SET_PATH = 3, /* Set parameter, supplying an object by path */
#define FSCONFIG_SET_PATH FSCONFIG_SET_PATH
FSCONFIG_SET_PATH_EMPTY = 4, /* Set parameter, supplying an object by (empty) path */
#define FSCONFIG_SET_PATH_EMPTY FSCONFIG_SET_PATH_EMPTY
FSCONFIG_SET_FD = 5, /* Set parameter, supplying an object by fd */
#define FSCONFIG_SET_FD FSCONFIG_SET_FD
FSCONFIG_CMD_CREATE = 6, /* Invoke superblock creation */
#define FSCONFIG_CMD_CREATE FSCONFIG_CMD_CREATE
FSCONFIG_CMD_RECONFIGURE = 7, /* Invoke superblock reconfiguration */
#define FSCONFIG_CMD_RECONFIGURE FSCONFIG_CMD_RECONFIGURE
};
#endif
#endif // FSCONFIG_CMD_CREATE

static inline int sys_fsopen(const char *fsname, unsigned int flags)
{
return syscall(__NR_fsopen, fsname, flags);
}
static inline int sys_fsconfig(int fd, unsigned int cmd, const char *key, const char *value, int aux)
{
return syscall(__NR_fsconfig, fd, cmd, key, value, aux);
}
static inline int sys_fsmount(int fd, unsigned int flags, unsigned int attr_flags)
{
return syscall(__NR_fsmount, fd, flags, attr_flags);
}
#ifndef MS_MGC_VAL
/* Magic mount flag number. Has to be or-ed to the flag values. */
#define MS_MGC_VAL 0xc0ed0000 /* Magic flag number to indicate "new" flags */
#define MS_MGC_MSK 0xffff0000 /* Magic flag number mask */
#endif

#endif
17 changes: 17 additions & 0 deletions criu/include/syscall.h
@@ -0,0 +1,17 @@
#ifndef __CR_SYSCALL_H__
#define __CR_SYSCALL_H__

static inline int sys_fsopen(const char *fsname, unsigned int flags)
{
return syscall(__NR_fsopen, fsname, flags);
}
static inline int sys_fsconfig(int fd, unsigned int cmd, const char *key, const char *value, int aux)
{
return syscall(__NR_fsconfig, fd, cmd, key, value, aux);
}
static inline int sys_fsmount(int fd, unsigned int flags, unsigned int attr_flags)
{
return syscall(__NR_fsmount, fd, flags, attr_flags);
}

#endif /* __CR_SYSCALL_H__ */
2 changes: 1 addition & 1 deletion criu/pie/parasite.c
Expand Up @@ -3,7 +3,6 @@
#include <signal.h>
#include <linux/limits.h>
#include <linux/capability.h>
#include <sys/mount.h>
#include <stdarg.h>
#include <sys/ioctl.h>
#include <sys/uio.h>
Expand All @@ -14,6 +13,7 @@
#include "int.h"
#include "types.h"
#include <compel/plugins/std/syscall.h>
#include "linux/mount.h"
#include "parasite.h"
#include "fcntl.h"
#include "prctl.h"
Expand Down
1 change: 1 addition & 0 deletions criu/util.c
Expand Up @@ -40,6 +40,7 @@
#include "mem.h"
#include "namespaces.h"
#include "criu-log.h"
#include "syscall.h"

#include "clone-noasan.h"
#include "cr_options.h"
Expand Down
13 changes: 0 additions & 13 deletions scripts/feature-tests.mak
Expand Up @@ -137,19 +137,6 @@ ENTRY(main)
END(main)
endef

define FEATURE_TEST_FSCONFIG

#include <linux/mount.h>

int main(void)
{
if (FSCONFIG_CMD_CREATE > 0)
return 0;
return 0;
}

endef

define FEATURE_TEST_NFTABLES_LIB_API_0

#include <string.h>
Expand Down

0 comments on commit 4c86d6a

Please sign in to comment.