Skip to content

Commit 6471c9c

Browse files
committed
selftests/landlock: Add tests to check unknown rule's access rights
Add two tests to make sure that we cannot add a rule with access rights that are unknown: * fs: layout0.rule_with_unknown_access * net: mini.rule_with_unknown_access Rename unknown_access_rights tests to ruleset_with_unknown_access . Cc: Konstantin Meskhidze <konstantin.meskhidze@huawei.com> Reviewed-by: Günther Noack <gnoack@google.com> Link: https://lore.kernel.org/r/20231130093616.67340-2-mic@digikod.net Signed-off-by: Mickaël Salaün <mic@digikod.net>
1 parent b85ea95 commit 6471c9c

2 files changed

Lines changed: 54 additions & 2 deletions

File tree

tools/testing/selftests/landlock/fs_test.c

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -589,7 +589,7 @@ TEST_F_FORK(layout1, file_and_dir_access_rights)
589589
ASSERT_EQ(0, close(ruleset_fd));
590590
}
591591

592-
TEST_F_FORK(layout0, unknown_access_rights)
592+
TEST_F_FORK(layout0, ruleset_with_unknown_access)
593593
{
594594
__u64 access_mask;
595595

@@ -605,6 +605,33 @@ TEST_F_FORK(layout0, unknown_access_rights)
605605
}
606606
}
607607

608+
TEST_F_FORK(layout0, rule_with_unknown_access)
609+
{
610+
__u64 access;
611+
struct landlock_path_beneath_attr path_beneath = {};
612+
const struct landlock_ruleset_attr ruleset_attr = {
613+
.handled_access_fs = ACCESS_ALL,
614+
};
615+
const int ruleset_fd =
616+
landlock_create_ruleset(&ruleset_attr, sizeof(ruleset_attr), 0);
617+
618+
ASSERT_LE(0, ruleset_fd);
619+
620+
path_beneath.parent_fd =
621+
open(TMP_DIR, O_PATH | O_DIRECTORY | O_CLOEXEC);
622+
ASSERT_LE(0, path_beneath.parent_fd);
623+
624+
for (access = 1ULL << 63; access != ACCESS_LAST; access >>= 1) {
625+
path_beneath.allowed_access = access;
626+
EXPECT_EQ(-1, landlock_add_rule(ruleset_fd,
627+
LANDLOCK_RULE_PATH_BENEATH,
628+
&path_beneath, 0));
629+
EXPECT_EQ(EINVAL, errno);
630+
}
631+
ASSERT_EQ(0, close(path_beneath.parent_fd));
632+
ASSERT_EQ(0, close(ruleset_fd));
633+
}
634+
608635
static void add_path_beneath(struct __test_metadata *const _metadata,
609636
const int ruleset_fd, const __u64 allowed_access,
610637
const char *const path)

tools/testing/selftests/landlock/net_test.c

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1260,7 +1260,7 @@ TEST_F(mini, network_access_rights)
12601260
}
12611261

12621262
/* Checks invalid attribute, out of landlock network access range. */
1263-
TEST_F(mini, unknown_access_rights)
1263+
TEST_F(mini, ruleset_with_unknown_access)
12641264
{
12651265
__u64 access_mask;
12661266

@@ -1276,6 +1276,31 @@ TEST_F(mini, unknown_access_rights)
12761276
}
12771277
}
12781278

1279+
TEST_F(mini, rule_with_unknown_access)
1280+
{
1281+
const struct landlock_ruleset_attr ruleset_attr = {
1282+
.handled_access_net = ACCESS_ALL,
1283+
};
1284+
struct landlock_net_port_attr net_port = {
1285+
.port = sock_port_start,
1286+
};
1287+
int ruleset_fd;
1288+
__u64 access;
1289+
1290+
ruleset_fd =
1291+
landlock_create_ruleset(&ruleset_attr, sizeof(ruleset_attr), 0);
1292+
ASSERT_LE(0, ruleset_fd);
1293+
1294+
for (access = 1ULL << 63; access != ACCESS_LAST; access >>= 1) {
1295+
net_port.allowed_access = access;
1296+
EXPECT_EQ(-1,
1297+
landlock_add_rule(ruleset_fd, LANDLOCK_RULE_NET_PORT,
1298+
&net_port, 0));
1299+
EXPECT_EQ(EINVAL, errno);
1300+
}
1301+
EXPECT_EQ(0, close(ruleset_fd));
1302+
}
1303+
12791304
TEST_F(mini, inval)
12801305
{
12811306
const struct landlock_ruleset_attr ruleset_attr = {

0 commit comments

Comments
 (0)