From: Jan Kara <jack@suse.cz>
To: <fstests@vger.kernel.org>
Cc: Christian Brauner <christian.brauner@ubuntu.com>,
Jan Kara <jack@suse.cz>
Subject: [PATCH 1/2] idmapped_mounts: Prepare for support for more features
Date: Thu, 31 Mar 2022 13:19:19 +0200 [thread overview]
Message-ID: <20220331111920.8377-2-jack@suse.cz> (raw)
In-Reply-To: <20220331111920.8377-1-jack@suse.cz>
Currently idmapped_mounts tests fail for kernels without CONFIG_USER_NS
because some tests are run despite missing support for idmapped mounts
and they implicitely require user namespace support. Prepare
idmapped_mounts to support more features a test may require to reliably
run.
Signed-off-by: Jan Kara <jack@suse.cz>
---
src/idmapped-mounts/idmapped-mounts.c | 102 +++++++++++++-------------
1 file changed, 53 insertions(+), 49 deletions(-)
diff --git a/src/idmapped-mounts/idmapped-mounts.c b/src/idmapped-mounts/idmapped-mounts.c
index 4cf6c3bb2a25..d3b27da6c085 100644
--- a/src/idmapped-mounts/idmapped-mounts.c
+++ b/src/idmapped-mounts/idmapped-mounts.c
@@ -13829,60 +13829,63 @@ static const struct option longopts[] = {
{NULL, 0, 0, 0},
};
+/* Flags for which functionality is required by the test */
+#define T_REQUIRE_IDMAPPED_MOUNTS (1U << 0)
+
struct t_idmapped_mounts {
int (*test)(void);
- bool require_fs_allow_idmap;
+ unsigned int support_flags;
const char *description;
} basic_suite[] = {
- { acls, true, "posix acls on regular mounts", },
- { create_in_userns, true, "create operations in user namespace", },
- { device_node_in_userns, true, "device node in user namespace", },
- { expected_uid_gid_idmapped_mounts, true, "expected ownership on idmapped mounts", },
- { fscaps, false, "fscaps on regular mounts", },
- { fscaps_idmapped_mounts, true, "fscaps on idmapped mounts", },
- { fscaps_idmapped_mounts_in_userns, true, "fscaps on idmapped mounts in user namespace", },
- { fscaps_idmapped_mounts_in_userns_separate_userns, true, "fscaps on idmapped mounts in user namespace with different id mappings", },
- { fsids_mapped, true, "mapped fsids", },
- { fsids_unmapped, true, "unmapped fsids", },
- { hardlink_crossing_mounts, false, "cross mount hardlink", },
- { hardlink_crossing_idmapped_mounts, true, "cross idmapped mount hardlink", },
- { hardlink_from_idmapped_mount, true, "hardlinks from idmapped mounts", },
- { hardlink_from_idmapped_mount_in_userns, true, "hardlinks from idmapped mounts in user namespace", },
+ { acls, T_REQUIRE_IDMAPPED_MOUNTS, "posix acls on regular mounts", },
+ { create_in_userns, T_REQUIRE_IDMAPPED_MOUNTS, "create operations in user namespace", },
+ { device_node_in_userns, T_REQUIRE_IDMAPPED_MOUNTS, "device node in user namespace", },
+ { expected_uid_gid_idmapped_mounts, T_REQUIRE_IDMAPPED_MOUNTS, "expected ownership on idmapped mounts", },
+ { fscaps, 0, "fscaps on regular mounts", },
+ { fscaps_idmapped_mounts, T_REQUIRE_IDMAPPED_MOUNTS, "fscaps on idmapped mounts", },
+ { fscaps_idmapped_mounts_in_userns, T_REQUIRE_IDMAPPED_MOUNTS, "fscaps on idmapped mounts in user namespace", },
+ { fscaps_idmapped_mounts_in_userns_separate_userns, T_REQUIRE_IDMAPPED_MOUNTS, "fscaps on idmapped mounts in user namespace with different id mappings", },
+ { fsids_mapped, T_REQUIRE_IDMAPPED_MOUNTS, "mapped fsids", },
+ { fsids_unmapped, T_REQUIRE_IDMAPPED_MOUNTS, "unmapped fsids", },
+ { hardlink_crossing_mounts, 0, "cross mount hardlink", },
+ { hardlink_crossing_idmapped_mounts, T_REQUIRE_IDMAPPED_MOUNTS, "cross idmapped mount hardlink", },
+ { hardlink_from_idmapped_mount, T_REQUIRE_IDMAPPED_MOUNTS, "hardlinks from idmapped mounts", },
+ { hardlink_from_idmapped_mount_in_userns, T_REQUIRE_IDMAPPED_MOUNTS, "hardlinks from idmapped mounts in user namespace", },
#ifdef HAVE_LIBURING_H
- { io_uring, false, "io_uring", },
- { io_uring_userns, false, "io_uring in user namespace", },
- { io_uring_idmapped, true, "io_uring from idmapped mounts", },
- { io_uring_idmapped_userns, true, "io_uring from idmapped mounts in user namespace", },
- { io_uring_idmapped_unmapped, true, "io_uring from idmapped mounts with unmapped ids", },
- { io_uring_idmapped_unmapped_userns, true, "io_uring from idmapped mounts with unmapped ids in user namespace", },
+ { io_uring, 0, "io_uring", },
+ { io_uring_userns, 0, "io_uring in user namespace", },
+ { io_uring_idmapped, T_REQUIRE_IDMAPPED_MOUNTS, "io_uring from idmapped mounts", },
+ { io_uring_idmapped_userns, T_REQUIRE_IDMAPPED_MOUNTS, "io_uring from idmapped mounts in user namespace", },
+ { io_uring_idmapped_unmapped, T_REQUIRE_IDMAPPED_MOUNTS, "io_uring from idmapped mounts with unmapped ids", },
+ { io_uring_idmapped_unmapped_userns, T_REQUIRE_IDMAPPED_MOUNTS, "io_uring from idmapped mounts with unmapped ids in user namespace", },
#endif
- { protected_symlinks, false, "following protected symlinks on regular mounts", },
- { protected_symlinks_idmapped_mounts, true, "following protected symlinks on idmapped mounts", },
- { protected_symlinks_idmapped_mounts_in_userns, true, "following protected symlinks on idmapped mounts in user namespace", },
- { rename_crossing_mounts, false, "cross mount rename", },
- { rename_crossing_idmapped_mounts, true, "cross idmapped mount rename", },
- { rename_from_idmapped_mount, true, "rename from idmapped mounts", },
- { rename_from_idmapped_mount_in_userns, true, "rename from idmapped mounts in user namespace", },
- { setattr_truncate, false, "setattr truncate", },
- { setattr_truncate_idmapped, true, "setattr truncate on idmapped mounts", },
- { setattr_truncate_idmapped_in_userns, true, "setattr truncate on idmapped mounts in user namespace", },
- { setgid_create, false, "create operations in directories with setgid bit set", },
- { setgid_create_idmapped, true, "create operations in directories with setgid bit set on idmapped mounts", },
- { setgid_create_idmapped_in_userns, true, "create operations in directories with setgid bit set on idmapped mounts in user namespace", },
- { setid_binaries, false, "setid binaries on regular mounts", },
- { setid_binaries_idmapped_mounts, true, "setid binaries on idmapped mounts", },
- { setid_binaries_idmapped_mounts_in_userns, true, "setid binaries on idmapped mounts in user namespace", },
- { setid_binaries_idmapped_mounts_in_userns_separate_userns, true, "setid binaries on idmapped mounts in user namespace with different id mappings", },
- { sticky_bit_unlink, false, "sticky bit unlink operations on regular mounts", },
- { sticky_bit_unlink_idmapped_mounts, true, "sticky bit unlink operations on idmapped mounts", },
- { sticky_bit_unlink_idmapped_mounts_in_userns, true, "sticky bit unlink operations on idmapped mounts in user namespace", },
- { sticky_bit_rename, false, "sticky bit rename operations on regular mounts", },
- { sticky_bit_rename_idmapped_mounts, true, "sticky bit rename operations on idmapped mounts", },
- { sticky_bit_rename_idmapped_mounts_in_userns, true, "sticky bit rename operations on idmapped mounts in user namespace", },
- { symlink_regular_mounts, false, "symlink from regular mounts", },
- { symlink_idmapped_mounts, true, "symlink from idmapped mounts", },
- { symlink_idmapped_mounts_in_userns, true, "symlink from idmapped mounts in user namespace", },
- { threaded_idmapped_mount_interactions, true, "threaded operations on idmapped mounts", },
+ { protected_symlinks, 0, "following protected symlinks on regular mounts", },
+ { protected_symlinks_idmapped_mounts, T_REQUIRE_IDMAPPED_MOUNTS, "following protected symlinks on idmapped mounts", },
+ { protected_symlinks_idmapped_mounts_in_userns, T_REQUIRE_IDMAPPED_MOUNTS, "following protected symlinks on idmapped mounts in user namespace", },
+ { rename_crossing_mounts, 0, "cross mount rename", },
+ { rename_crossing_idmapped_mounts, T_REQUIRE_IDMAPPED_MOUNTS, "cross idmapped mount rename", },
+ { rename_from_idmapped_mount, T_REQUIRE_IDMAPPED_MOUNTS, "rename from idmapped mounts", },
+ { rename_from_idmapped_mount_in_userns, T_REQUIRE_IDMAPPED_MOUNTS, "rename from idmapped mounts in user namespace", },
+ { setattr_truncate, 0, "setattr truncate", },
+ { setattr_truncate_idmapped, T_REQUIRE_IDMAPPED_MOUNTS, "setattr truncate on idmapped mounts", },
+ { setattr_truncate_idmapped_in_userns, T_REQUIRE_IDMAPPED_MOUNTS, "setattr truncate on idmapped mounts in user namespace", },
+ { setgid_create, 0, "create operations in directories with setgid bit set", },
+ { setgid_create_idmapped, T_REQUIRE_IDMAPPED_MOUNTS, "create operations in directories with setgid bit set on idmapped mounts", },
+ { setgid_create_idmapped_in_userns, T_REQUIRE_IDMAPPED_MOUNTS, "create operations in directories with setgid bit set on idmapped mounts in user namespace", },
+ { setid_binaries, 0, "setid binaries on regular mounts", },
+ { setid_binaries_idmapped_mounts, T_REQUIRE_IDMAPPED_MOUNTS, "setid binaries on idmapped mounts", },
+ { setid_binaries_idmapped_mounts_in_userns, T_REQUIRE_IDMAPPED_MOUNTS, "setid binaries on idmapped mounts in user namespace", },
+ { setid_binaries_idmapped_mounts_in_userns_separate_userns, T_REQUIRE_IDMAPPED_MOUNTS, "setid binaries on idmapped mounts in user namespace with different id mappings", },
+ { sticky_bit_unlink, 0, "sticky bit unlink operations on regular mounts", },
+ { sticky_bit_unlink_idmapped_mounts, T_REQUIRE_IDMAPPED_MOUNTS, "sticky bit unlink operations on idmapped mounts", },
+ { sticky_bit_unlink_idmapped_mounts_in_userns, T_REQUIRE_IDMAPPED_MOUNTS, "sticky bit unlink operations on idmapped mounts in user namespace", },
+ { sticky_bit_rename, 0, "sticky bit rename operations on regular mounts", },
+ { sticky_bit_rename_idmapped_mounts, T_REQUIRE_IDMAPPED_MOUNTS, "sticky bit rename operations on idmapped mounts", },
+ { sticky_bit_rename_idmapped_mounts_in_userns, T_REQUIRE_IDMAPPED_MOUNTS, "sticky bit rename operations on idmapped mounts in user namespace", },
+ { symlink_regular_mounts, 0, "symlink from regular mounts", },
+ { symlink_idmapped_mounts, T_REQUIRE_IDMAPPED_MOUNTS, "symlink from idmapped mounts", },
+ { symlink_idmapped_mounts_in_userns, T_REQUIRE_IDMAPPED_MOUNTS, "symlink from idmapped mounts in user namespace", },
+ { threaded_idmapped_mount_interactions, T_REQUIRE_IDMAPPED_MOUNTS, "threaded operations on idmapped mounts", },
};
struct t_idmapped_mounts fscaps_in_ancestor_userns[] = {
@@ -13936,7 +13939,8 @@ static bool run_test(struct t_idmapped_mounts suite[], size_t suite_size)
* If the underlying filesystems does not support idmapped
* mounts only run vfs generic tests.
*/
- if (t->require_fs_allow_idmap && !t_fs_allow_idmap) {
+ if (t->support_flags & T_REQUIRE_IDMAPPED_MOUNTS &&
+ !t_fs_allow_idmap) {
log_debug("Skipping test %s", t->description);
continue;
}
--
2.34.1
next prev parent reply other threads:[~2022-03-31 11:19 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-31 11:19 [PATCH 0/2] Fix generic/633 failure on systems without CONFIG_USER_NS Jan Kara
2022-03-31 11:19 ` Jan Kara [this message]
2022-03-31 11:38 ` [PATCH 1/2] idmapped_mounts: Prepare for support for more features Christian Brauner
2022-03-31 11:19 ` [PATCH 2/2] generic/633: Avoid failure without CONFIG_USER_NS Jan Kara
2022-03-31 11:38 ` Christian Brauner
2022-03-31 11:39 ` [PATCH 0/2] Fix generic/633 failure on systems " Christian Brauner
2022-04-20 17:59 ` Christian Brauner
2022-04-25 13:18 ` Zorro Lang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220331111920.8377-2-jack@suse.cz \
--to=jack@suse.cz \
--cc=christian.brauner@ubuntu.com \
--cc=fstests@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.