summaryrefslogtreecommitdiff
path: root/sys-apps/util-linux/files
diff options
context:
space:
mode:
authorV3n3RiX <venerix@koprulu.sector>2023-05-23 08:58:35 +0100
committerV3n3RiX <venerix@koprulu.sector>2023-05-23 08:58:35 +0100
commit955b5fcaf4acc77c39a1f145d7c56e99f13083a7 (patch)
tree1141703ebc6ca24ff935b991e261d716a5d98243 /sys-apps/util-linux/files
parent24c53d42e0294f4f6e36fbb051891af86c9ae503 (diff)
gentoo auto-resync : 23:05:2023 - 08:58:35
Diffstat (limited to 'sys-apps/util-linux/files')
-rw-r--r--sys-apps/util-linux/files/util-linux-2.39-check-for-mount_setattr.patch98
-rw-r--r--sys-apps/util-linux/files/util-linux-2.39-mount-parse-options-user.patch46
-rw-r--r--sys-apps/util-linux/files/util-linux-2.39-tests-for-mount_setattr.patch13
3 files changed, 157 insertions, 0 deletions
diff --git a/sys-apps/util-linux/files/util-linux-2.39-check-for-mount_setattr.patch b/sys-apps/util-linux/files/util-linux-2.39-check-for-mount_setattr.patch
new file mode 100644
index 000000000000..c1eb3748f782
--- /dev/null
+++ b/sys-apps/util-linux/files/util-linux-2.39-check-for-mount_setattr.patch
@@ -0,0 +1,98 @@
+https://bugs.gentoo.org/906797
+https://github.com/util-linux/util-linux/pull/2248
+
+From 1bd85b64632280d6bf0e86b4ff29da8b19321c5f Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Thomas=20Wei=C3=9Fschuh?= <thomas@t-8ch.de>
+Date: Sat, 20 May 2023 06:38:20 +0200
+Subject: [PATCH] libmount: check for availability of mount_setattr
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+If mount_setattr is not available but needed fall back to the legacy
+mount API.
+
+Fixes #2247
+
+Signed-off-by: Thomas Weißschuh <thomas@t-8ch.de>
+--- a/libmount/src/hook_mount.c
++++ b/libmount/src/hook_mount.c
+@@ -510,6 +510,15 @@ static inline int fsopen_is_supported(void)
+ return rc;
+ }
+
++static inline int mount_setattr_is_supported(void)
++{
++ int rc;
++
++ errno = 0;
++ rc = mount_setattr(-1, NULL, 0, NULL, 0);
++ return !(rc == -1 && errno == ENOSYS);
++}
++
+ /*
+ * open_tree() and fsopen()
+ */
+@@ -675,9 +684,14 @@ static int hook_prepare(struct libmnt_context *cxt,
+ /* call mount_setattr() */
+ if (!rc
+ && cxt->helper == NULL
+- && (set != 0 || clr != 0 || (flags & MS_REMOUNT)))
++ && (set != 0 || clr != 0 || (flags & MS_REMOUNT))) {
++ if (!mount_setattr_is_supported()) {
++ hookset_deinit(cxt, hs);
++ return 1;
++ }
+ rc = mnt_context_append_hook(cxt, hs, MNT_STAGE_MOUNT, NULL,
+ hook_set_vfsflags);
++ }
+
+ /* call move_mount() to attach target */
+ if (!rc
+@@ -688,9 +702,14 @@ static int hook_prepare(struct libmnt_context *cxt,
+ hook_attach_target);
+
+ /* set propagation (has to be attached to VFS) */
+- if (!rc && mnt_optlist_get_propagation(ol))
++ if (!rc && mnt_optlist_get_propagation(ol)) {
++ if (!mount_setattr_is_supported()) {
++ hookset_deinit(cxt, hs);
++ return 1;
++ }
+ rc = mnt_context_append_hook(cxt, hs, MNT_STAGE_MOUNT_POST, NULL,
+ hook_set_propagation);
++ }
+
+ DBG(HOOK, ul_debugobj(hs, "prepare mount done [rc=%d]", rc));
+ return rc;
+diff --git a/tests/expected/mount/fallback-mount_setattr b/tests/expected/mount/fallback-mount_setattr
+new file mode 100644
+index 0000000000..3e18ebf09e
+--- /dev/null
++++ b/tests/expected/mount/fallback-mount_setattr
+@@ -0,0 +1 @@
++private
+--- a/tests/ts/mount/fallback
++++ b/tests/ts/mount/fallback
+@@ -68,5 +68,21 @@ $TS_CMD_UMOUNT $MOUNTPOINT
+ ts_finalize_subtest
+
+
++ts_init_subtest "mount_setattr"
++"$TS_CMD_MOUNT" "$DEVICE" "$MOUNTPOINT" >> $TS_OUTPUT 2>> $TS_ERRLOG
++ts_is_mounted $DEVICE || ts_log "Cannot find $DEVICE in /proc/mounts"
++$TS_HELPER_ENOSYS -s mount_setattr -- \
++ "$TS_CMD_MOUNT" -o remount,ro "$MOUNTPOINT" \
++ >> $TS_OUTPUT 2>> $TS_ERRLOG
++$TS_CMD_FINDMNT --kernel --mountpoint "$MOUNTPOINT" --options "ro" &> /dev/null
++[ "$?" == "0" ] || ts_die "Cannot find read-only in $MOUNTPOINT in /proc/self/mountinfo"
++$TS_HELPER_ENOSYS -s mount_setattr -- \
++ "$TS_CMD_MOUNT" --make-slave "$MOUNTPOINT" \
++ >> $TS_OUTPUT 2>> $TS_ERRLOG
++$TS_CMD_FINDMNT -n --kernel --mountpoint "$MOUNTPOINT" -o PROPAGATION >> $TS_OUTPUT
++$TS_CMD_UMOUNT $MOUNTPOINT
++ts_finalize_subtest
++
++
+ ts_finalize
+
diff --git a/sys-apps/util-linux/files/util-linux-2.39-mount-parse-options-user.patch b/sys-apps/util-linux/files/util-linux-2.39-mount-parse-options-user.patch
new file mode 100644
index 000000000000..e02d02c7f503
--- /dev/null
+++ b/sys-apps/util-linux/files/util-linux-2.39-mount-parse-options-user.patch
@@ -0,0 +1,46 @@
+https://bugs.gentoo.org/906797#c4
+https://bugs.gentoo.org/906859
+https://github.com/util-linux/util-linux/issues/2238
+https://github.com/util-linux/util-linux/commit/c0267687fd7b41b00d523d1985182d7eb574effd
+
+From c0267687fd7b41b00d523d1985182d7eb574effd Mon Sep 17 00:00:00 2001
+From: Karel Zak <kzak@redhat.com>
+Date: Mon, 22 May 2023 15:00:25 +0200
+Subject: [PATCH] libmount: fix options prepend/insert and merging
+
+ * the order of the new options should not be changed
+ (for example prepend "a,b,c" to list with "d" has to generate "a,b,c,d", not "c,b,a,d")
+
+ * make sure that options map is defined when merging options
+
+Fixes: https://github.com/util-linux/util-linux/issues/2238
+Signed-off-by: Karel Zak <kzak@redhat.com>
+--- a/libmount/src/optlist.c
++++ b/libmount/src/optlist.c
+@@ -338,6 +338,7 @@ int mnt_optlist_merge_opts(struct libmnt_optlist *ls)
+
+ /* remove inverted option */
+ else if (opt->ent && x->ent
++ && opt->map == x->map
+ && opt->ent->id == x->ent->id
+ && (opt->ent->mask & MNT_INVERT
+ || x->ent->mask & MNT_INVERT))
+@@ -520,6 +521,8 @@ static int optlist_add_optstr(struct libmnt_optlist *ls, const char *optstr,
+ if (!opt)
+ return -ENOMEM;
+ opt->src = MNT_OPTSRC_STRING;
++ if (where)
++ where = &opt->opts;
+ }
+
+ optlist_cleanup_cache(ls);
+@@ -622,6 +625,8 @@ static int optlist_add_flags(struct libmnt_optlist *ls, unsigned long flags,
+ if (!opt)
+ return -ENOMEM;
+ opt->src = MNT_OPTSRC_FLAG;
++ if (where)
++ where = &opt->opts;
+ }
+
+ optlist_cleanup_cache(ls);
+
diff --git a/sys-apps/util-linux/files/util-linux-2.39-tests-for-mount_setattr.patch b/sys-apps/util-linux/files/util-linux-2.39-tests-for-mount_setattr.patch
new file mode 100644
index 000000000000..0b0ade4e181c
--- /dev/null
+++ b/sys-apps/util-linux/files/util-linux-2.39-tests-for-mount_setattr.patch
@@ -0,0 +1,13 @@
+https://github.com/util-linux/util-linux/pull/2248
+https://bugs.gentoo.org/906797
+
+--- a/tests/helpers/test_enosys.c
++++ b/tests/helpers/test_enosys.c
+@@ -68,6 +68,7 @@ const struct syscall syscalls[] = {
+ { "move_mount", __NR_move_mount },
+ { "open_tree", __NR_open_tree },
+ { "fsopen", __NR_fsopen },
++ { "mount_setattr", __NR_mount_setattr },
+ };
+
+ int main(int argc, char **argv)