[Devel] [PATCH hci-8.1 v3 1/2] selftests: ve: grant the directories the files sit in
Konstantin Khorenko
khorenko at virtuozzo.com
Thu Sep 24 19:17:29 MSK 2026
changelog v2->v3 ?
+ none of my comments are fixed in both those patches.
NAK for both.
And ask Claude + Fable to review your patches before sending them in the list.
--
Best regards,
Konstantin Khorenko,
Virtuozzo Linux Kernel Team
On 9/24/26 17:01, Eva Kurchatova wrote:
> The sysfs variant names nested leaves, kernel/vmcoreinfo and
> kernel/notes, while the proc one names files at the top of the
> filesystem. Both enforcement tests grant the leaves and nothing else,
> so in the sysfs case the lookup stops at /sys/kernel, which a fresh VE
> cannot traverse, and every open answers ENOENT:
>
> not ok 14 ve_perms.sysfs.enforce_allows
> not ok 15 ve_perms.sysfs.enforce_denies
>
> Grant x on each directory along the way, taken from the path the
> variant already gives.
>
> Fixes: 303ce49b7446 ("selftests/ve: add ve_perms test for proc and sysfs")
>
> https://virtuozzo.atlassian.net/browse/VSTOR-144955
>
> Feature: fix vz selftests
> Signed-off-by: Eva Kurchatova <eva.kurchatova at virtuozzo.com>
> ---
> tools/testing/selftests/ve/ve_perms_test.c | 33 ++++++++++++++++++++++
> 1 file changed, 33 insertions(+)
>
> diff --git a/tools/testing/selftests/ve/ve_perms_test.c b/tools/testing/selftests/ve/ve_perms_test.c
> index 25ffbd42c380..2b542dc30139 100644
> --- a/tools/testing/selftests/ve/ve_perms_test.c
> +++ b/tools/testing/selftests/ve/ve_perms_test.c
> @@ -348,6 +348,37 @@ TEST_F(ve_perms, write_parser)
> * read, and granting x on the directory lets it be traversed (the lookup then
> * fails ENOENT on the missing child, not EACCES).
> */
> +/*
> + * A leaf is only reachable once every directory above it can be traversed.
> + * The variants name their files relative to the mount point, so grant x on
> + * each directory along the way; a file at the top of the filesystem has
> + * none and needs nothing.
> + */
> +static int allow_path(int cgv2_fd, const char *path, const char *file)
> +{
> + char dir[240]; /* set_entry() writes "<dir> <mask>" into 256 */
> + const char *sep;
> +
> + for (sep = strchr(file, '/'); sep; sep = strchr(sep + 1, '/')) {
> + if (sep - file >= (long)sizeof(dir))
> + return -1;
> + snprintf(dir, sizeof(dir), "%.*s", (int)(sep - file), file);
> + if (set_entry(cgv2_fd, path, dir, "x") < 0)
> + return -1;
> + }
> + return 0;
> +}
> +
> +static int allow_paths(int cgv2_fd, const char *path, const char *const files[])
> +{
> + int i;
> +
> + for (i = 0; i < NR_FILES; i++)
> + if (allow_path(cgv2_fd, path, files[i]) < 0)
> + return -1;
> + return 0;
> +}
> +
> TEST_F(ve_perms, enforce_allows)
> {
> char path[PATH_MAX], absent[128];
> @@ -358,6 +389,7 @@ TEST_F(ve_perms, enforce_allows)
>
> ve_file(path, sizeof(path), self->ctid_a, variant->fs);
>
> + ASSERT_EQ(allow_paths(self->cgv2_fd, path, variant->files), 0);
> ASSERT_EQ(set_entries(self->cgv2_fd, path, variant->files, "r"), 0);
> for (i = 0; i < NR_FILES; i++)
> EXPECT_EQ(ve_open_rel(self->cgv2_fd, self->ctid_a,
> @@ -400,6 +432,7 @@ TEST_F(ve_perms, enforce_denies)
> O_RDONLY), 0);
>
> /* Granted w only: visible but not readable. */
> + ASSERT_EQ(allow_paths(self->cgv2_fd, path, variant->files), 0);
> ASSERT_EQ(set_entries(self->cgv2_fd, path, variant->files, "w"), 0);
> for (i = 0; i < NR_FILES; i++)
> EXPECT_EQ(ve_open_rel(self->cgv2_fd, self->ctid_a,
More information about the Devel
mailing list