diff --git a/lxc/.signature b/lxc/.signature index d6bd02de2..03d8ecd70 100644 --- a/lxc/.signature +++ b/lxc/.signature @@ -1,6 +1,6 @@ untrusted comment: verify with /etc/ports/contrib.pub -RWSagIOpLGJF33eTZyOE+gOloyzmgN2loJX7jRCISYECo1GNcwWuT6TmjVW7CpeduEbGDqmjzQcCUPIqdIBiBsaro1NFIdgjmwQ= -SHA256 (Pkgfile) = 986dc202bed69cddbc80cf07031626b005b70265987569b4cc1cd8047d2b0a1a +RWSagIOpLGJF3zn49iBgATR2o1O01tEi/hRJ+U5zOeqyVLie+rM6QrihqOguk4PGwi9ogrBNaTQ4iaKDxSSO5ds1TGjYTuysKQQ= +SHA256 (Pkgfile) = 0c7853ce2be894d164e2625e5916f3ff2ede90323ce2c19a4295fd7c65b40f2b SHA256 (.footprint) = c5c5ea11f58282ae02e7c37ce978aa60ca0c2450ce7e04f7f066b8b0b5a17a5c SHA256 (lxc-5.0.1.tar.gz) = d8195423bb1e206f8521d24b6cde4789f043960c7cf065990a9cf741dcfd4222 SHA256 (default.conf) = 6739fe54ffe7924a63fd47d8ff4b453e08b78bbd1b08e4426504b8f740e8b55f @@ -9,4 +9,5 @@ SHA256 (lxc-users-setup) = 995f72d2284334ab84790951cfbf91d9b7016f4a93a3c51d774de SHA256 (lxc-users) = 7b58fae4b1551c63d7839560875e4f8461aade852f33611a8a8319957f23b0eb SHA256 (lxc-cgroups) = 6cdc6b76c438dfbcacf7ccd20ae9190ca5d12bad9fba60c5d77052c0e3f9258b SHA256 (lxc-net) = 4e597a3ebb896ff852d54d4add562945bcf91e1005f3963ee7cbfc82606fcf2c +SHA256 (4179.patch) = f209df0491ebd2835ef03cfc785c4441b2d3a5065c036e97105375a654380b39 SHA256 (02-distrosysconfdir.patch) = 43aab13e0c9f1e2b640d5da4b112c0f965bf62e9afc9d0c20ed4a6ed4e6b61c6 diff --git a/lxc/4179.patch b/lxc/4179.patch new file mode 100644 index 000000000..e186c7fbb --- /dev/null +++ b/lxc/4179.patch @@ -0,0 +1,383 @@ +From c1115e1503bf955c97f4cf3b925a6a9f619764c3 Mon Sep 17 00:00:00 2001 +From: Christian Brauner +Date: Tue, 9 Aug 2022 16:14:25 +0200 +Subject: [PATCH 1/3] build: detect where struct mount_attr is declared + +Fixes: #4176 +Signed-off-by: Christian Brauner (Microsoft) +--- + meson.build | 30 ++++++++++++++++++++++++++++-- + src/lxc/conf.c | 6 +++--- + src/lxc/conf.h | 2 +- + src/lxc/mount_utils.c | 6 +++--- + src/lxc/syscall_wrappers.h | 12 ++++++++++-- + 5 files changed, 45 insertions(+), 11 deletions(-) + +diff --git a/meson.build b/meson.build +index a145faf069..f679aabbc8 100644 +--- a/meson.build ++++ b/meson.build +@@ -590,7 +590,6 @@ decl_headers = ''' + foreach decl: [ + '__aligned_u64', + 'struct clone_args', +- 'struct mount_attr', + 'struct open_how', + 'struct rtnl_link_stats64', + ] +@@ -610,7 +609,6 @@ foreach tuple: [ + ['struct seccomp_notif_sizes'], + ['struct clone_args'], + ['__aligned_u64'], +- ['struct mount_attr'], + ['struct open_how'], + ['struct rtnl_link_stats64'], + ] +@@ -630,6 +628,34 @@ foreach tuple: [ + endif + endforeach + ++## Types. ++decl_headers = ''' ++#include ++''' ++ ++# We get -1 if the size cannot be determined ++if cc.sizeof('struct mount_attr', prefix: decl_headers, args: '-D_GNU_SOURCE') > 0 ++ srcconf.set10('HAVE_' + 'struct mount_attr'.underscorify().to_upper(), true) ++ found_types += 'struct mount_attr (sys/mount.h)' ++else ++ srcconf.set10('HAVE_' + 'struct mount_attr'.underscorify().to_upper(), false) ++ missing_types += 'struct mount_attr (sys/mount.h)' ++endif ++ ++## Types. ++decl_headers = ''' ++#include ++''' ++ ++# We get -1 if the size cannot be determined ++if cc.sizeof('struct mount_attr', prefix: decl_headers, args: '-D_GNU_SOURCE') > 0 ++ srcconf.set10('HAVE_UAPI_' + 'struct mount_attr'.underscorify().to_upper(), true) ++ found_types += 'struct mount_attr (linux/mount.h)' ++else ++ srcconf.set10('HAVE_UAPI_' + 'struct mount_attr'.underscorify().to_upper(), false) ++ missing_types += 'struct mount_attr (linux/mount.h)' ++endif ++ + ## Headers. + foreach ident: [ + ['bpf', '''#include +diff --git a/src/lxc/conf.c b/src/lxc/conf.c +index ffbe74c2f6..4193cd07f5 100644 +--- a/src/lxc/conf.c ++++ b/src/lxc/conf.c +@@ -2885,7 +2885,7 @@ static int __lxc_idmapped_mounts_child(struct lxc_handler *handler, FILE *f) + struct lxc_mount_options opts = {}; + int dfd_from; + const char *source_relative, *target_relative; +- struct lxc_mount_attr attr = {}; ++ struct mount_attr attr = {}; + + ret = parse_lxc_mount_attrs(&opts, mntent.mnt_opts); + if (ret < 0) +@@ -3005,7 +3005,7 @@ static int __lxc_idmapped_mounts_child(struct lxc_handler *handler, FILE *f) + + /* Set propagation mount options. */ + if (opts.attr.propagation) { +- attr = (struct lxc_mount_attr) { ++ attr = (struct mount_attr) { + .propagation = opts.attr.propagation, + }; + +@@ -4109,7 +4109,7 @@ int lxc_idmapped_mounts_parent(struct lxc_handler *handler) + + for (;;) { + __do_close int fd_from = -EBADF, fd_userns = -EBADF; +- struct lxc_mount_attr attr = {}; ++ struct mount_attr attr = {}; + struct lxc_mount_options opts = {}; + ssize_t ret; + +diff --git a/src/lxc/conf.h b/src/lxc/conf.h +index 7dc2f15b60..772479f9e1 100644 +--- a/src/lxc/conf.h ++++ b/src/lxc/conf.h +@@ -223,7 +223,7 @@ struct lxc_mount_options { + unsigned long mnt_flags; + unsigned long prop_flags; + char *data; +- struct lxc_mount_attr attr; ++ struct mount_attr attr; + char *raw_options; + }; + +diff --git a/src/lxc/mount_utils.c b/src/lxc/mount_utils.c +index bba75f933c..88dd73ee36 100644 +--- a/src/lxc/mount_utils.c ++++ b/src/lxc/mount_utils.c +@@ -31,7 +31,7 @@ lxc_log_define(mount_utils, lxc); + * setting in @attr_set, but must also specify MOUNT_ATTR__ATIME in the + * @attr_clr field. + */ +-static inline void set_atime(struct lxc_mount_attr *attr) ++static inline void set_atime(struct mount_attr *attr) + { + switch (attr->attr_set & MOUNT_ATTR__ATIME) { + case MOUNT_ATTR_RELATIME: +@@ -272,7 +272,7 @@ int create_detached_idmapped_mount(const char *path, int userns_fd, + { + __do_close int fd_tree_from = -EBADF; + unsigned int open_tree_flags = OPEN_TREE_CLONE | OPEN_TREE_CLOEXEC; +- struct lxc_mount_attr attr = { ++ struct mount_attr attr = { + .attr_set = MOUNT_ATTR_IDMAP | attr_set, + .attr_clr = attr_clr, + .userns_fd = userns_fd, +@@ -335,7 +335,7 @@ int __fd_bind_mount(int dfd_from, const char *path_from, __u64 o_flags_from, + __u64 attr_clr, __u64 propagation, int userns_fd, + bool recursive) + { +- struct lxc_mount_attr attr = { ++ struct mount_attr attr = { + .attr_set = attr_set, + .attr_clr = attr_clr, + .propagation = propagation, +diff --git a/src/lxc/syscall_wrappers.h b/src/lxc/syscall_wrappers.h +index a5e98b565c..c8a7d0c7b7 100644 +--- a/src/lxc/syscall_wrappers.h ++++ b/src/lxc/syscall_wrappers.h +@@ -18,6 +18,12 @@ + #include "macro.h" + #include "syscall_numbers.h" + ++#if HAVE_STRUCT_MOUNT_ATTR ++#include ++#elif HAVE_UAPI_STRUCT_MOUNT_ATTR ++#include ++#endif ++ + #ifdef HAVE_LINUX_MEMFD_H + #include + #endif +@@ -210,16 +216,18 @@ extern int fsmount(int fs_fd, unsigned int flags, unsigned int attr_flags); + /* + * mount_setattr() + */ +-struct lxc_mount_attr { ++#if !HAVE_STRUCT_MOUNT_ATTR && !HAVE_UAPI_STRUCT_MOUNT_ATTR ++struct mount_attr { + __u64 attr_set; + __u64 attr_clr; + __u64 propagation; + __u64 userns_fd; + }; ++#endif + + #if !HAVE_MOUNT_SETATTR + static inline int mount_setattr(int dfd, const char *path, unsigned int flags, +- struct lxc_mount_attr *attr, size_t size) ++ struct mount_attr *attr, size_t size) + { + return syscall(__NR_mount_setattr, dfd, path, flags, attr, size); + } + +From ef1e0607b82e27350c2d677d649c6a0a9693fd40 Mon Sep 17 00:00:00 2001 +From: Christian Brauner +Date: Tue, 9 Aug 2022 16:27:40 +0200 +Subject: [PATCH 2/3] build: detect sys/pidfd.h availability + +Fixes: #4176 +Signed-off-by: Christian Brauner (Microsoft) +--- + meson.build | 1 + + src/lxc/process_utils.h | 6 ++++++ + 2 files changed, 7 insertions(+) + +diff --git a/meson.build b/meson.build +index f679aabbc8..e999542336 100644 +--- a/meson.build ++++ b/meson.build +@@ -735,6 +735,7 @@ foreach tuple: [ + ['sys/resource.h'], + ['sys/memfd.h'], + ['sys/personality.h'], ++ ['sys/pidfd.h'], + ['sys/signalfd.h'], + ['sys/timerfd.h'], + ['pty.h'], +diff --git a/src/lxc/process_utils.h b/src/lxc/process_utils.h +index 9c15b15741..ed84741d0e 100644 +--- a/src/lxc/process_utils.h ++++ b/src/lxc/process_utils.h +@@ -15,6 +15,10 @@ + #include + #include + ++#if HAVE_SYS_PIDFD_H ++#include ++#endif ++ + #include "compiler.h" + #include "syscall_numbers.h" + +@@ -136,9 +140,11 @@ + #endif + + /* waitid */ ++#if !HAVE_SYS_PIDFD_H + #ifndef P_PIDFD + #define P_PIDFD 3 + #endif ++#endif + + #ifndef CLONE_ARGS_SIZE_VER0 + #define CLONE_ARGS_SIZE_VER0 64 /* sizeof first published struct */ + +From cbabe8abf11e7e7fb49c123bae31efdd9bc8f1e8 Mon Sep 17 00:00:00 2001 +From: Christian Brauner +Date: Tue, 9 Aug 2022 17:19:40 +0200 +Subject: [PATCH 3/3] build: check for FS_CONFIG_* header symbol in sys/mount.h + +Fixes: #4176 +Signed-off-by: Christian Brauner (Microsoft) +--- + meson.build | 59 +++++++++++++++++++++++++++++++++++++++++-- + src/lxc/mount_utils.h | 16 ++++++++++++ + 2 files changed, 73 insertions(+), 2 deletions(-) + +diff --git a/meson.build b/meson.build +index e999542336..9f8a5de60c 100644 +--- a/meson.build ++++ b/meson.build +@@ -639,8 +639,7 @@ if cc.sizeof('struct mount_attr', prefix: decl_headers, args: '-D_GNU_SOURCE') > + found_types += 'struct mount_attr (sys/mount.h)' + else + srcconf.set10('HAVE_' + 'struct mount_attr'.underscorify().to_upper(), false) +- missing_types += 'struct mount_attr (sys/mount.h)' +-endif ++ missing_types += 'struct mount_attr (sys/mount.h)' endif + + ## Types. + decl_headers = ''' +@@ -656,6 +655,62 @@ else + missing_types += 'struct mount_attr (linux/mount.h)' + endif + ++if cc.has_header_symbol('sys/mount.h', 'FSCONFIG_SET_FLAG') ++ srcconf.set10('HAVE_' + 'FSCONFIG_SET_FLAG'.underscorify().to_upper(), true) ++ found_types += 'FSCONFIG_SET_FLAG' ++else ++ srcconf.set10('HAVE_' + 'FSCONFIG_SET_FLAG'.underscorify().to_upper(), false) ++ missing_types += 'FSCONFIG_SET_FLAG' ++endif ++ ++if cc.has_header_symbol('sys/mount.h', 'FS_CONFIG_SET_STRING') ++ srcconf.set10('HAVE_' + 'FS_CONFIG_SET_STRING'.underscorify().to_upper(), true) ++ found_types += 'FS_CONFIG_SET_STRING' ++else ++ srcconf.set10('HAVE_' + 'FS_CONFIG_SET_STRING'.underscorify().to_upper(), false) ++ missing_types += 'FS_CONFIG_SET_STRING' ++endif ++ ++if cc.has_header_symbol('sys/mount.h', 'FS_CONFIG_SET_BINARY') ++ srcconf.set10('HAVE_' + 'FS_CONFIG_SET_BINARY'.underscorify().to_upper(), true) ++ found_types += 'FS_CONFIG_SET_BINARY' ++else ++ srcconf.set10('HAVE_' + 'FS_CONFIG_SET_BINARY'.underscorify().to_upper(), false) ++ missing_types += 'FS_CONFIG_SET_BINARY' ++endif ++ ++if cc.has_header_symbol('sys/mount.h', 'FS_CONFIG_SET_PATH_EMPTY') ++ srcconf.set10('HAVE_' + 'FS_CONFIG_SET_PATH_EMPTY'.underscorify().to_upper(), true) ++ found_types += 'FS_CONFIG_SET_PATH_EMPTY' ++else ++ srcconf.set10('HAVE_' + 'FS_CONFIG_SET_PATH_EMPTY'.underscorify().to_upper(), false) ++ missing_types += 'FS_CONFIG_SET_PATH_EMPTY' ++endif ++ ++if cc.has_header_symbol('sys/mount.h', 'FS_CONFIG_SET_PATH_FD') ++ srcconf.set10('HAVE_' + 'FS_CONFIG_SET_PATH_FD'.underscorify().to_upper(), true) ++ found_types += 'FS_CONFIG_SET_PATH_FD' ++else ++ srcconf.set10('HAVE_' + 'FS_CONFIG_SET_PATH_FD'.underscorify().to_upper(), false) ++ missing_types += 'FS_CONFIG_SET_PATH_FD' ++endif ++ ++if cc.has_header_symbol('sys/mount.h', 'FS_CONFIG_SET_CMD_CREATE') ++ srcconf.set10('HAVE_' + 'FS_CONFIG_SET_CMD_CREATE'.underscorify().to_upper(), true) ++ found_types += 'FS_CONFIG_SET_CMD_CREATE' ++else ++ srcconf.set10('HAVE_' + 'FS_CONFIG_SET_CMD_CREATE'.underscorify().to_upper(), false) ++ missing_types += 'FS_CONFIG_SET_CMD_CREATE' ++endif ++ ++if cc.has_header_symbol('sys/mount.h', 'FS_CONFIG_SET_CMD_RECONFIGURE') ++ srcconf.set10('HAVE_' + 'FS_CONFIG_SET_CMD_RECONFIGURE'.underscorify().to_upper(), true) ++ found_types += 'FS_CONFIG_SET_CMD_RECONFIGURE' ++else ++ srcconf.set10('HAVE_' + 'FS_CONFIG_SET_CMD_RECONFIGURE'.underscorify().to_upper(), false) ++ missing_types += 'FS_CONFIG_SET_CMD_RECONFIGURE' ++endif ++ + ## Headers. + foreach ident: [ + ['bpf', '''#include +diff --git a/src/lxc/mount_utils.h b/src/lxc/mount_utils.h +index ea392672d8..fd34739459 100644 +--- a/src/lxc/mount_utils.h ++++ b/src/lxc/mount_utils.h +@@ -82,37 +82,53 @@ struct lxc_rootfs; + #endif + + /* fsconfig() commands */ ++#if !HAVE_FSCONFIG_SET_FLAG + #ifndef FSCONFIG_SET_FLAG + #define FSCONFIG_SET_FLAG 0 /* Set parameter, supplying no value */ + #endif ++#endif + ++#if !HAVE_FSCONFIG_SET_STRING + #ifndef FSCONFIG_SET_STRING + #define FSCONFIG_SET_STRING 1 /* Set parameter, supplying a string value */ + #endif ++#endif + ++#if !HAVE_FSCONFIG_SET_BINARY + #ifndef FSCONFIG_SET_BINARY + #define FSCONFIG_SET_BINARY 2 /* Set parameter, supplying a binary blob value */ + #endif ++#endif + ++#if !HAVE_FSCONFIG_SET_PATH + #ifndef FSCONFIG_SET_PATH + #define FSCONFIG_SET_PATH 3 /* Set parameter, supplying an object by path */ + #endif ++#endif + ++#if !HAVE_FSCONFIG_SET_PATH_EMPTY + #ifndef FSCONFIG_SET_PATH_EMPTY + #define FSCONFIG_SET_PATH_EMPTY 4 /* Set parameter, supplying an object by (empty) path */ + #endif ++#endif + ++#if !HAVE_FSCONFIG_SET_FD + #ifndef FSCONFIG_SET_FD + #define FSCONFIG_SET_FD 5 /* Set parameter, supplying an object by fd */ + #endif ++#endif + ++#if !HAVE_FSCONFIG_CMD_CREATE + #ifndef FSCONFIG_CMD_CREATE + #define FSCONFIG_CMD_CREATE 6 /* Invoke superblock creation */ + #endif ++#endif + ++#if !FSCONFIG_CMD_RECONFIGURE + #ifndef FSCONFIG_CMD_RECONFIGURE + #define FSCONFIG_CMD_RECONFIGURE 7 /* Invoke superblock reconfiguration */ + #endif ++#endif + + /* fsmount() flags */ + #ifndef FSMOUNT_CLOEXEC diff --git a/lxc/Pkgfile b/lxc/Pkgfile index 94e30a42b..a4c790931 100644 --- a/lxc/Pkgfile +++ b/lxc/Pkgfile @@ -7,13 +7,15 @@ name=lxc version=5.0.1 -release=1 +release=2 source=(https://linuxcontainers.org/downloads/$name/$name-$version.tar.gz default.conf lxc-usernet lxc-users-setup lxc-users lxc-cgroups lxc-net + 4179.patch 02-distrosysconfdir.patch) build() { patch -Np1 -d $name-$version -i $SRC/02-distrosysconfdir.patch + patch -Np1 -d $name-$version -i $SRC/4179.patch # fix pam_libdir sed "/pam_security/s/libdir/'\/', 'lib'/" -i $name-$version/meson.build