[LTP] [PATCH] landlock04: Skip variants unsupported by the running Landlock ABI

Ivan Hu ivan.hu@canonical.com
Mon Jul 6 03:37:19 CEST 2026


The LANDLOCK_ACCESS_FS_TRUNCATE access right is only available from
Landlock ABI v3 (kernel v6.2, commit b9f5ce27c8f8 "landlock: Support
file truncation"). On older kernels (e.g. those exposing ABI v1) setup()
passed the variant's access right, including LANDLOCK_ACCESS_FS_TRUNCATE,
directly to landlock_add_rule(), which failed with EINVAL and broke the
test:

  landlock04.c: TBROK: landlock_add_rule(8, 1, ..., 0): EINVAL (22)

tester_get_all_fs_rules() already masks the rule set according to the
running kernel's Landlock ABI. Use it in setup() to detect when a variant
requires an unsupported access right and skip it with TCONF instead of
breaking.

Signed-off-by: Ivan Hu <ivan.hu@canonical.com>
---
 testcases/kernel/syscalls/landlock/landlock04.c | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/testcases/kernel/syscalls/landlock/landlock04.c b/testcases/kernel/syscalls/landlock/landlock04.c
index 737fdbf24..86dc19994 100644
--- a/testcases/kernel/syscalls/landlock/landlock04.c
+++ b/testcases/kernel/syscalls/landlock/landlock04.c
@@ -143,12 +143,26 @@ static void enable_exec_libs(const int ruleset_fd)
 static void setup(void)
 {
 	struct tvariant variant = tvariants[tst_variant];
+	int supported_rules;
 
 	verify_landlock_is_enabled();
 
 	tst_res(TINFO, "Testing %s", variant.desc);
 
-	ruleset_attr->handled_access_fs = tester_get_all_fs_rules();
+	supported_rules = tester_get_all_fs_rules();
+
+	/* Some access rights are only available from a given Landlock ABI
+	 * version (e.g. LANDLOCK_ACCESS_FS_TRUNCATE needs ABI >= 3). Skip the
+	 * variant when the running kernel doesn't support the tested right,
+	 * otherwise landlock_add_rule() fails with EINVAL.
+	 */
+	if (variant.access & ~supported_rules) {
+		tst_brk(TCONF,
+			"%s is not supported by the current Landlock ABI",
+			variant.desc);
+	}
+
+	ruleset_attr->handled_access_fs = supported_rules;
 
 	ruleset_fd = SAFE_LANDLOCK_CREATE_RULESET(
 		ruleset_attr, sizeof(struct tst_landlock_ruleset_attr_abi1), 0);
-- 
2.53.0



More information about the ltp mailing list