[PATCH v2 3/8] fs/acl: Add ACL_OTHER permissions test
Sachin Sant <[email protected]>
| Newsgroups | gmane.linux.ltp |
|---|---|
| Message-ID | <[email protected]> |
Add acl_other01 test to validate that ACL_OTHER permissions are not affected by ACL_MASK. The test verifies that: - ACL_OTHER entry with rwx permissions allows access - ACL_MASK set to --- does not restrict ACL_OTHER - Users not matching owner, named users, or groups use ACL_OTHER This confirms that ACL_MASK only affects ACL_USER, ACL_GROUP_OBJ, and ACL_GROUP entries, but not ACL_OTHER. Signed-off-by: Sachin Sant <[email protected]> --- V2 changes: - Updated copyright header as per LTP format. - v1 link https://lore.kernel.org/ltp/20260602121958.27494-1-sachinp-tEXmvtCZX7AybS5Ee8rs3A@public.gmane.org/T/#t V1 changes: - Use HAVE_LIBACL guards in .c code - Report TCONF when libacl is not available - rfc link https://lore.kernel.org/ltp/477836fd-80c8-4168-bfe6-00b374bb2534-tEXmvtCZX7AybS5Ee8rs3A@public.gmane.org/T/#t --- runtest/fs | 1 + testcases/kernel/fs/acl/.gitignore | 1 + testcases/kernel/fs/acl/acl_other01.c | 107 ++++++++++++++++++++++++++ 3 files changed, 109 insertions(+) create mode 100644 testcases/kernel/fs/acl/acl_other01.c diff --git a/runtest/fs b/runtest/fs index 69ecb8647..f25487a33 100644 --- a/runtest/fs +++ b/runtest/fs @@ -91,3 +91,4 @@ squashfs01 squashfs01 # Run the acl tests acl_user_obj01 acl_user_obj01 acl_mask01 acl_mask01 +acl_other01 acl_other01 diff --git a/testcases/kernel/fs/acl/.gitignore b/testcases/kernel/fs/acl/.gitignore index bfcdee93d..c3ec0fad3 100644 --- a/testcases/kernel/fs/acl/.gitignore +++ b/testcases/kernel/fs/acl/.gitignore @@ -1,2 +1,3 @@ /acl_user_obj01 /acl_mask01 +/acl_other01 diff --git a/testcases/kernel/fs/acl/acl_other01.c b/testcases/kernel/fs/acl/acl_other01.c new file mode 100644 index 000000000..b2bad3387 --- /dev/null +++ b/testcases/kernel/fs/acl/acl_other01.c @@ -0,0 +1,107 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Copyright (c) 2026 IBM + * + * Original shell test by Kai Zhao ([email protected]) + * Converted to C by Sachin Sant <[email protected]> + */ + +/*\ + * Test ACL_OTHER permissions. + * + * Verify that ACL_OTHER permissions work correctly and are not affected + * by ACL_MASK. The ACL_OTHER entry controls access for users who don't + * match any other ACL entry (not the owner, not in any named user entry, + * not in the owning group, and not in any named group entry). + * + * Unlike ACL_USER, ACL_GROUP, and ACL_GROUP_OBJ entries, ACL_OTHER + * permissions are not restricted by the ACL_MASK. + * + * [Algorithm] + * + * 1. Set up ACL with rwx permissions for ACL_OTHER + * 2. Set ACL_MASK to --- (no permissions) + * 3. Attempt file creation as a user matching ACL_OTHER + * 4. Verify access is granted despite restrictive mask + */ + +#include "acl_lib.h" + +uid_t user1_uid, user2_uid, user3_uid; +gid_t user1_gid, user2_gid, user3_gid; +int users_created = 0; + +#ifdef HAVE_LIBACL + +static void run(void) +{ + acl_t acl; + int err; + + tst_res(TINFO, "Testing ACL_OTHER permissions"); + reset_test_path(); + + acl = acl_init(4); + if (!acl) + tst_brk(TBROK | TERRNO, "acl_init failed"); + + add_acl_entry(acl, ACL_USER_OBJ, + ACL_READ | ACL_WRITE | ACL_EXECUTE); + add_empty_acl_entry(acl, ACL_GROUP_OBJ); + add_empty_acl_entry(acl, ACL_MASK); + add_acl_entry(acl, ACL_OTHER, + ACL_READ | ACL_WRITE | ACL_EXECUTE); + + set_acl_file(TESTDIR, ACL_TYPE_ACCESS, acl); + safe_acl_free(acl); + + err = try_create_as(user2_uid, user2_gid, 0644); + if (err) { + errno = err; + tst_res(TFAIL | TERRNO, + "ACL_OTHER rwx should allow access despite mask"); + return; + } + + cleanup_testfile(); + tst_res(TPASS, "ACL_OTHER not affected by mask"); +} + +static void setup(void) +{ + init_test_users(); + reset_test_path(); +} + +static void cleanup(void) +{ + cleanup_test_paths(); + cleanup_test_users(); +} + +static struct tst_test test = { + .test_all = run, + .setup = setup, + .cleanup = cleanup, + .needs_root = 1, + .mount_device = 1, + .mntpoint = MNTPOINT, + .forks_child = 1, + .filesystems = (struct tst_fs[]) { + {.type = "ext2", .mnt_data = "acl"}, + {.type = "ext3", .mnt_data = "acl"}, + {.type = "ext4", .mnt_data = "acl"}, + {.type = "xfs"}, + {.type = "btrfs"}, + {} + }, + .needs_cmds = (struct tst_cmd[]) { + {.cmd = "useradd"}, + {.cmd = "userdel"}, + {} + } +}; + +#else +TST_TEST_TCONF("libacl or ACL headers are not available"); +#endif -- 2.39.1 -- Mailing list info: https://lists.linux.it/listinfo/ltp