Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package criu for openSUSE:Factory checked in at 2022-09-14 13:45:11 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/criu (Old) and /work/SRC/openSUSE:Factory/.criu.new.2083 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "criu" Wed Sep 14 13:45:11 2022 rev:57 rq:1003458 version:3.17.1 Changes: -------- --- /work/SRC/openSUSE:Factory/criu/criu.changes 2022-08-11 18:32:50.454241744 +0200 +++ /work/SRC/openSUSE:Factory/.criu.new.2083/criu.changes 2022-09-14 13:45:25.061960048 +0200 @@ -1,0 +2,7 @@ +Wed Sep 14 07:20:38 UTC 2022 - Takashi Iwai <ti...@suse.com> + +- Fix build with glibc 2.36: backports of two upstream fixes + criu-fix-conflicting-headers.patch + mount-add-definition-for-FSOPEN_CLOEXEC.patch + +------------------------------------------------------------------- New: ---- criu-fix-conflicting-headers.patch mount-add-definition-for-FSOPEN_CLOEXEC.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ criu.spec ++++++ --- /var/tmp/diff_new_pack.xjQ4l2/_old 2022-09-14 13:45:25.609961427 +0200 +++ /var/tmp/diff_new_pack.xjQ4l2/_new 2022-09-14 13:45:25.617961448 +0200 @@ -45,6 +45,9 @@ Patch2: 0002-Fix-build-with-nftables-installed-in-different-direc.patch Patch3: criu-amdgpu-plugin-fix.patch Patch4: plugin-dir-path.patch +# upstream fixes +Patch5: criu-fix-conflicting-headers.patch +Patch6: mount-add-definition-for-FSOPEN_CLOEXEC.patch BuildRequires: libcap-devel %if %{with_amdgpu_plugin} BuildRequires: libdrm-devel @@ -125,6 +128,8 @@ %patch2 -p1 %patch3 -p1 %patch4 -p1 +%patch5 -p1 +%patch6 -p1 # default off echo "BINFMT_MISC_VIRTUALIZED" > .config ++++++ criu-fix-conflicting-headers.patch ++++++ >From 4c86d6a7d54abb64fc5a15131f3351224e8c071b Mon Sep 17 00:00:00 2001 From: Radostin Stoyanov <rstoya...@fedoraproject.org> Date: Sun, 31 Jul 2022 16:07:30 +0000 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>`. Fixes: #1949 Signed-off-by: Radostin Stoyanov <rstoya...@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 | 48 ++++++++++++++++++++++--------------------- criu/include/syscall.h | 17 +++++++++++++++ criu/pie/parasite.c | 2 - criu/util.c | 1 scripts/feature-tests.mak | 13 ----------- 11 files changed, 64 insertions(+), 41 deletions(-) create mode 100644 criu/include/linux/aio_abi.h create mode 100644 criu/include/syscall.h --- a/Makefile.config +++ b/Makefile.config @@ -81,7 +81,7 @@ export DEFINES += $(FEATURE_DEFINES) export CFLAGS += $(FEATURE_DEFINES) $(FEATURE_CFLAGS) FEATURES_LIST := TCP_REPAIR STRLCPY STRLCAT PTRACE_PEEKSIGINFO \ - SETPROCTITLE_INIT MEMFD TCP_REPAIR_WINDOW FSCONFIG MEMFD_CREATE OPENAT2 + SETPROCTITLE_INIT MEMFD TCP_REPAIR_WINDOW MEMFD_CREATE OPENAT2 # $1 - config name define gen-feature-test --- 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 --- 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" --- 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" @@ -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" --- 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); --- /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 */ --- 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 */ - 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 --- /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__ */ \ No newline at end of file --- 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" --- a/criu/util.c +++ b/criu/util.c @@ -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" --- 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> ++++++ mount-add-definition-for-FSOPEN_CLOEXEC.patch ++++++ >From 517c0947050e63aac72f63a3bf373d76264723b9 Mon Sep 17 00:00:00 2001 From: Radostin Stoyanov <rstoya...@fedoraproject.org> Date: Wed, 24 Aug 2022 21:20:30 +0200 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 <rstoya...@fedoraproject.org> --- criu/include/linux/mount.h | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/criu/include/linux/mount.h b/criu/include/linux/mount.h index 0d55a588cb9a..fefafa89e14d 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,13 @@ 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.35.3