Fix compilation problems caused by glibc upgra
This commit is contained in:
parent
b17b3e224d
commit
459c4e8c5a
269
0073-criu-fix-conflicting-headers.patch
Normal file
269
0073-criu-fix-conflicting-headers.patch
Normal file
@ -0,0 +1,269 @@
|
||||
From 9e512890a5858431acb42a2a685b445e7111dfc5 Mon Sep 17 00:00:00 2001
|
||||
From: z00557007 <zhoujie133@huawei.com>
|
||||
Date: Wed, 4 Jan 2023 16:26:16 +0800
|
||||
Subject: [PATCH] criu: fix conflicting headers 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>`.
|
||||
|
||||
Signed-off-by: Radostin Stoyanov <rstoyanov@fedoraproject.org>
|
||||
---
|
||||
Makefile.config | 2 +-
|
||||
criu/cgroup.c | 1 +
|
||||
criu/cr-check.c | 2 +-
|
||||
criu/cr-restore.c | 3 ++-
|
||||
criu/include/aio.h | 2 +-
|
||||
criu/include/linux/aio_abi.h | 14 ++++++++++++++
|
||||
criu/include/linux/mount.h | 34 ++++++++++++++++++----------------
|
||||
criu/include/syscall.h | 17 +++++++++++++++++
|
||||
criu/pie/parasite.c | 2 +-
|
||||
criu/util.c | 1 +
|
||||
scripts/feature-tests.mak | 13 -------------
|
||||
11 files changed, 57 insertions(+), 34 deletions(-)
|
||||
create mode 100644 criu/include/linux/aio_abi.h
|
||||
create mode 100644 criu/include/syscall.h
|
||||
|
||||
diff --git a/Makefile.config b/Makefile.config
|
||||
index 6e3e1b0..0b4ccd4 100644
|
||||
--- a/Makefile.config
|
||||
+++ b/Makefile.config
|
||||
@@ -70,7 +70,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
|
||||
|
||||
# $1 - config name
|
||||
define gen-feature-test
|
||||
diff --git a/criu/cgroup.c b/criu/cgroup.c
|
||||
index ccac37f..3874b65 100644
|
||||
--- a/criu/cgroup.c
|
||||
+++ b/criu/cgroup.c
|
||||
@@ -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
|
||||
diff --git a/criu/cr-check.c b/criu/cr-check.c
|
||||
index ba87511..951e71d 100644
|
||||
--- a/criu/cr-check.c
|
||||
+++ b/criu/cr-check.c
|
||||
@@ -21,7 +21,6 @@
|
||||
#include <sys/prctl.h>
|
||||
#include <sched.h>
|
||||
#include <sys/mount.h>
|
||||
-#include <linux/aio_abi.h>
|
||||
|
||||
#include "../soccr/soccr.h"
|
||||
|
||||
@@ -52,6 +51,7 @@
|
||||
#include "net.h"
|
||||
#include "restorer.h"
|
||||
#include "uffd.h"
|
||||
+#include "linux/aio_abi.h"
|
||||
|
||||
#include "images/inventory.pb-c.h"
|
||||
|
||||
diff --git a/criu/cr-restore.c b/criu/cr-restore.c
|
||||
index c3ff65d..10be969 100644
|
||||
--- a/criu/cr-restore.c
|
||||
+++ b/criu/cr-restore.c
|
||||
@@ -22,7 +22,6 @@
|
||||
#include <compel/ptrace.h>
|
||||
#include "common/compiler.h"
|
||||
|
||||
-#include "linux/mount.h"
|
||||
#include "linux/rseq.h"
|
||||
|
||||
#include "clone-noasan.h"
|
||||
@@ -89,6 +88,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"
|
||||
diff --git a/criu/include/aio.h b/criu/include/aio.h
|
||||
index f8a59df..715a45c 100644
|
||||
--- a/criu/include/aio.h
|
||||
+++ b/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);
|
||||
diff --git a/criu/include/linux/aio_abi.h b/criu/include/linux/aio_abi.h
|
||||
new file mode 100644
|
||||
index 0000000..d9ce787
|
||||
--- /dev/null
|
||||
+++ b/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 */
|
||||
diff --git a/criu/include/linux/mount.h b/criu/include/linux/mount.h
|
||||
index 840d627..0d55a58 100644
|
||||
--- a/criu/include/linux/mount.h
|
||||
+++ b/criu/include/linux/mount.h
|
||||
@@ -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 */
|
||||
+#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
|
||||
diff --git a/criu/include/syscall.h b/criu/include/syscall.h
|
||||
new file mode 100644
|
||||
index 0000000..3c0b3a4
|
||||
--- /dev/null
|
||||
+++ b/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__ */
|
||||
diff --git a/criu/pie/parasite.c b/criu/pie/parasite.c
|
||||
index c781303..9f8fbf8 100644
|
||||
--- a/criu/pie/parasite.c
|
||||
+++ b/criu/pie/parasite.c
|
||||
@@ -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>
|
||||
@@ -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"
|
||||
diff --git a/criu/util.c b/criu/util.c
|
||||
index e682161..915a043 100644
|
||||
--- a/criu/util.c
|
||||
+++ b/criu/util.c
|
||||
@@ -37,6 +37,7 @@
|
||||
#include "mem.h"
|
||||
#include "namespaces.h"
|
||||
#include "criu-log.h"
|
||||
+#include "syscall.h"
|
||||
|
||||
#include "clone-noasan.h"
|
||||
#include "cr_options.h"
|
||||
diff --git a/scripts/feature-tests.mak b/scripts/feature-tests.mak
|
||||
index 8df20af..eecefa3 100644
|
||||
--- a/scripts/feature-tests.mak
|
||||
+++ b/scripts/feature-tests.mak
|
||||
@@ -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>
|
||||
--
|
||||
2.33.0
|
||||
|
||||
104
0074-mount-add-definition-for-FSOPEN_CLOEXEC.patch
Normal file
104
0074-mount-add-definition-for-FSOPEN_CLOEXEC.patch
Normal file
@ -0,0 +1,104 @@
|
||||
From ae4b0ff2b9c91859513d841ebb71a67bed8a0d7c Mon Sep 17 00:00:00 2001
|
||||
From: z00557007 <zhoujie133@huawei.com>
|
||||
Date: Wed, 4 Jan 2023 17:22:29 +0800
|
||||
Subject: [PATCH] mount: add definition for FSOPEN_CLOEXEC A recent change in
|
||||
glibc introduced `enum fsconfig_command` [1] and as a result the compilation
|
||||
of criu fails with the following errors
|
||||
|
||||
In file included from criu/pie/util.c:3:
|
||||
/usr/include/sys/mount.h:240:6: error: redeclaration of 'enum fsconfig_command'
|
||||
240 | enum fsconfig_command
|
||||
| ^~~~~~~~~~~~~~~~
|
||||
In file included from /usr/include/sys/mount.h:32:
|
||||
criu/include/linux/mount.h:11:6: note: originally defined here
|
||||
11 | enum fsconfig_command {
|
||||
| ^~~~~~~~~~~~~~~~
|
||||
/usr/include/sys/mount.h:242:3: error: redeclaration of enumerator 'FSCONFIG_SET_FLAG'
|
||||
242 | FSCONFIG_SET_FLAG = 0, /* Set parameter, supplying no value */
|
||||
| ^~~~~~~~~~~~~~~~~
|
||||
criu/include/linux/mount.h:12:9: note: previous definition of 'FSCONFIG_SET_FLAG' with type 'enum fsconfig_command'
|
||||
12 | FSCONFIG_SET_FLAG = 0, /* Set parameter, supplying no value */
|
||||
| ^~~~~~~~~~~~~~~~~
|
||||
/usr/include/sys/mount.h:244:3: error: redeclaration of enumerator 'FSCONFIG_SET_STRING'
|
||||
244 | FSCONFIG_SET_STRING = 1, /* Set parameter, supplying a string value */
|
||||
| ^~~~~~~~~~~~~~~~~~~
|
||||
criu/include/linux/mount.h:14:9: note: previous definition of 'FSCONFIG_SET_STRING' with type 'enum fsconfig_command'
|
||||
14 | FSCONFIG_SET_STRING = 1, /* Set parameter, supplying a string value */
|
||||
| ^~~~~~~~~~~~~~~~~~~
|
||||
/usr/include/sys/mount.h:246:3: error: redeclaration of enumerator 'FSCONFIG_SET_BINARY'
|
||||
246 | FSCONFIG_SET_BINARY = 2, /* Set parameter, supplying a binary blob value */
|
||||
| ^~~~~~~~~~~~~~~~~~~
|
||||
criu/include/linux/mount.h:16:9: note: previous definition of 'FSCONFIG_SET_BINARY' with type 'enum fsconfig_command'
|
||||
16 | FSCONFIG_SET_BINARY = 2, /* Set parameter, supplying a binary blob value */
|
||||
| ^~~~~~~~~~~~~~~~~~~
|
||||
/usr/include/sys/mount.h:248:3: error: redeclaration of enumerator 'FSCONFIG_SET_PATH'
|
||||
248 | FSCONFIG_SET_PATH = 3, /* Set parameter, supplying an object by path */
|
||||
| ^~~~~~~~~~~~~~~~~
|
||||
criu/include/linux/mount.h:18:9: note: previous definition of 'FSCONFIG_SET_PATH' with type 'enum fsconfig_command'
|
||||
18 | FSCONFIG_SET_PATH = 3, /* Set parameter, supplying an object by path */
|
||||
| ^~~~~~~~~~~~~~~~~
|
||||
/usr/include/sys/mount.h:250:3: error: redeclaration of enumerator 'FSCONFIG_SET_PATH_EMPTY'
|
||||
250 | FSCONFIG_SET_PATH_EMPTY = 4, /* Set parameter, supplying an object by (empty) path */
|
||||
| ^~~~~~~~~~~~~~~~~~~~~~~
|
||||
criu/include/linux/mount.h:20:9: note: previous definition of 'FSCONFIG_SET_PATH_EMPTY' with type 'enum fsconfig_command'
|
||||
20 | FSCONFIG_SET_PATH_EMPTY = 4, /* Set parameter, supplying an object by (empty) path */
|
||||
| ^~~~~~~~~~~~~~~~~~~~~~~
|
||||
/usr/include/sys/mount.h:252:3: error: redeclaration of enumerator 'FSCONFIG_SET_FD'
|
||||
252 | FSCONFIG_SET_FD = 5, /* Set parameter, supplying an object by fd */
|
||||
| ^~~~~~~~~~~~~~~
|
||||
criu/include/linux/mount.h:22:9: note: previous definition of 'FSCONFIG_SET_FD' with type 'enum fsconfig_command'
|
||||
22 | FSCONFIG_SET_FD = 5, /* Set parameter, supplying an object by fd */
|
||||
| ^~~~~~~~~~~~~~~
|
||||
/usr/include/sys/mount.h:254:3: error: redeclaration of enumerator 'FSCONFIG_CMD_CREATE'
|
||||
254 | FSCONFIG_CMD_CREATE = 6, /* Invoke superblock creation */
|
||||
| ^~~~~~~~~~~~~~~~~~~
|
||||
criu/include/linux/mount.h:24:9: note: previous definition of 'FSCONFIG_CMD_CREATE' with type 'enum fsconfig_command'
|
||||
24 | FSCONFIG_CMD_CREATE = 6, /* Invoke superblock creation */
|
||||
| ^~~~~~~~~~~~~~~~~~~
|
||||
/usr/include/sys/mount.h:256:3: error: redeclaration of enumerator 'FSCONFIG_CMD_RECONFIGURE'
|
||||
256 | FSCONFIG_CMD_RECONFIGURE = 7, /* Invoke superblock reconfiguration */
|
||||
| ^~~~~~~~~~~~~~~~~~~~~~~~
|
||||
criu/include/linux/mount.h:26:9: note: previous definition of 'FSCONFIG_CMD_RECONFIGURE' with type 'enum fsconfig_command'
|
||||
26 | FSCONFIG_CMD_RECONFIGURE = 7, /* Invoke superblock reconfiguration */
|
||||
|
||||
This patch adds definition for FSOPEN_CLOEXEC to solve this problem. In particular,
|
||||
sys/mount.h includes ifndef check for FSOPEN_CLOEXEC surrounding `enum fsconfig_command`.
|
||||
|
||||
[1] https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=7eae6a91e9b1670330c9f15730082c91c0b1d570
|
||||
|
||||
Reported-by: Younes Manton (@ymanton)
|
||||
Signed-off-by: Radostin Stoyanov <rstoyanov@fedoraproject.org>
|
||||
---
|
||||
criu/include/linux/mount.h | 9 +++++++--
|
||||
1 file changed, 7 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/criu/include/linux/mount.h b/criu/include/linux/mount.h
|
||||
index 0d55a58..ee9386c 100644
|
||||
--- a/criu/include/linux/mount.h
|
||||
+++ b/criu/include/linux/mount.h
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
/* Copied from /usr/include/sys/mount.h */
|
||||
|
||||
-#ifndef FSCONFIG_CMD_CREATE
|
||||
+#ifndef FSOPEN_CLOEXEC
|
||||
/* The type of fsconfig call made. */
|
||||
enum fsconfig_command {
|
||||
FSCONFIG_SET_FLAG = 0, /* Set parameter, supplying no value */
|
||||
@@ -26,7 +26,12 @@ enum fsconfig_command {
|
||||
FSCONFIG_CMD_RECONFIGURE = 7, /* Invoke superblock reconfiguration */
|
||||
#define FSCONFIG_CMD_RECONFIGURE FSCONFIG_CMD_RECONFIGURE
|
||||
};
|
||||
-#endif // FSCONFIG_CMD_CREATE
|
||||
+#endif // FSOPEN_CLOEXEC
|
||||
+
|
||||
+/* fsopen flags. With the redundant definition, we check if the kernel,
|
||||
+ * glibc value and our value still match.
|
||||
+ */
|
||||
+#define FSOPEN_CLOEXEC 0x00000001
|
||||
|
||||
#ifndef MS_MGC_VAL
|
||||
/* Magic mount flag number. Has to be or-ed to the flag values. */
|
||||
--
|
||||
2.33.0
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
Name: criu
|
||||
Version: 3.16.1
|
||||
Release: 4
|
||||
Release: 5
|
||||
Provides: crtools = %{version}-%{release}
|
||||
Obsoletes: crtools <= 1.0-2
|
||||
Summary: A tool of Checkpoint/Restore in User-space
|
||||
@ -90,6 +90,8 @@ Patch: 0070-zdtm-tmp-test-script.patch
|
||||
Patch: 0071-mod-add-criu-indepent-test.patch
|
||||
Patch: 0072-kabichk-add-KABI-check-code.patch
|
||||
%endif
|
||||
Patch: 0073-criu-fix-conflicting-headers.patch
|
||||
Patch: 0074-mount-add-definition-for-FSOPEN_CLOEXEC.patch
|
||||
|
||||
%description
|
||||
Checkpoint/Restore in Userspace(CRIU),is a software tool for the linux operating system.
|
||||
@ -172,6 +174,9 @@ chmod 0755 %{buildroot}/run/%{name}/
|
||||
%doc %{_mandir}/man1/{compel.1*,crit.1*,criu-ns.1*}
|
||||
|
||||
%changelog
|
||||
* Wed Jan 4 2023 zhoujie <zhoujie133@huawei.com> - 3.16.1-5
|
||||
- Fix compilation problems caused by glibc upgrade
|
||||
|
||||
* Fri Jul 22 2022 tenglei <tenglei@kylinos.cn> - 3.16.1-4
|
||||
- Remove non-compliant README files
|
||||
- fix files not found egg-info
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user