public inbox for ltp@lists.linux.it
 help / color / mirror / Atom feed
From: Petr Vorel <pvorel@suse.cz>
To: Edward Liaw <edliaw@google.com>
Cc: kernel-team@android.com, ltp@lists.linux.it
Subject: Re: [LTP] [PATCH] cgroup_core02: Requires cgroup2 mounted with nsdelegate
Date: Wed, 31 Jul 2024 10:07:18 +0200	[thread overview]
Message-ID: <20240731080718.GA1412835@pevik> (raw)
In-Reply-To: <20240730211922.3648849-1-edliaw@google.com>

Hi Edward, all,

Merged (with few changes below), thank you!

> If cgroup2 is not mounted with the nsdelegate option, this test will
> fail.  It has been patched in kselftests, but has not been ported to LTP
> yet.  This adds an additional tst_test configuration option,
> needs_cgroup_nsdelegate, to check for the mount option.

I mentioned also the kernel commit 4793cb599b1b ("selftests: cgroup: skip
test_cgcore_lesser_ns_open when cgroup2 mounted without nsdelegate")

> Link: https://lore.kernel.org/linux-kernel/Zg2xPtwFvT-lsSJX@slm.duckdns.org/T/
> Link: https://www.mail-archive.com/canonical-ubuntu-qa@lists.launchpad.net/msg02400.html
> Signed-off-by: Edward Liaw <edliaw@google.com>

...
> diff --git a/include/tst_test.h b/include/tst_test.h
> index 6c76f043d..af622e507 100644
> --- a/include/tst_test.h
> +++ b/include/tst_test.h
> @@ -578,6 +578,8 @@ struct tst_fs {
>  	const enum tst_cg_ver needs_cgroup_ver;

>  	const char *const *needs_cgroup_ctrls;
> +
> +	int needs_cgroup_nsdelegate:1;
New member also needs to be documented above:

 *
 * @needs_cgroup_nsdelegate: If set test the will run only if cgroup2 is mounted
 *                           with nsdelegate option.

I added this before merge.

>  };

>  /**
> diff --git a/lib/tst_cgroup.c b/lib/tst_cgroup.c
> index f6afb51d6..b18efffed 100644
> --- a/lib/tst_cgroup.c
> +++ b/lib/tst_cgroup.c
> @@ -71,6 +71,8 @@ struct cgroup_root {
>  	/* CGroup for current test. Which may have children. */
>  	struct cgroup_dir test_dir;

> +	int nsdelegate:1;
> +
>  	int we_mounted_it:1;
>  	/* cpuset is in compatability mode */
>  	int no_cpuset_prefix:1;
> @@ -344,6 +346,11 @@ static int cgroup_v1_mounted(void)
>  	return !!roots[1].ver;
>  }

> +static int cgroup_v2_nsdelegate(void)
> +{
> +	return !!roots[0].nsdelegate;
> +}
> +
>  static int cgroup_mounted(void)
>  {
>  	return cgroup_v2_mounted() || cgroup_v1_mounted();
> @@ -568,6 +575,7 @@ static void cgroup_root_scan(const char *const mnt_type,
>  	struct cgroup_ctrl *ctrl;
>  	uint32_t ctrl_field = 0;
>  	int no_prefix = 0;
> +	int nsdelegate = 0;
>  	char buf[BUFSIZ];
>  	char *tok;
>  	const int mnt_dfd = SAFE_OPEN(mnt_dir, O_PATH | O_DIRECTORY);
> @@ -582,6 +590,9 @@ static void cgroup_root_scan(const char *const mnt_type,
>  		if (const_ctrl)
>  			add_ctrl(&ctrl_field, const_ctrl);
>  	}
> +	for (tok = strtok(mnt_opts, ","); tok; tok = strtok(NULL, ",")) {
> +		nsdelegate |= !strcmp("nsdelegate", tok);
> +	}

>  	if (root->ver && ctrl_field == root->ctrl_field)
>  		goto discard;
> @@ -632,6 +643,7 @@ backref:
>  	root->mnt_dir.dir_fd = mnt_dfd;
>  	root->ctrl_field = ctrl_field;
>  	root->no_cpuset_prefix = no_prefix;
> +	root->nsdelegate = nsdelegate;

>  	for_each_ctrl(ctrl) {
>  		if (has_ctrl(root->ctrl_field, ctrl))
> @@ -869,6 +881,11 @@ void tst_cg_require(const char *const ctrl_name,

>  mkdirs:
>  	root = ctrl->ctrl_root;
> +
> +	if (options->needs_nsdelegate && cgroup_v2_mounted() &&
> +		&& !cgroup_v2_nsdelegate())

Double && broke the build, thus I fixed it (+ added inline for readability,
otherwise it'd be better to use { } when split on two lines).

Kind regards,
Petr

> +		tst_brk(TCONF, "Requires cgroup2 to be mounted with nsdelegate");
> +
>  	add_ctrl(&root->mnt_dir.ctrl_field, ctrl);

>  	if (cgroup_ctrl_on_v2(ctrl) && options->needs_ver == TST_CG_V1) {
> diff --git a/lib/tst_test.c b/lib/tst_test.c
> index e5bc5bf4d..b5aae20ab 100644
> --- a/lib/tst_test.c
> +++ b/lib/tst_test.c
> @@ -1130,6 +1130,7 @@ static void do_cgroup_requires(void)
>  {
>  	const struct tst_cg_opts cg_opts = {
>  		.needs_ver = tst_test->needs_cgroup_ver,
> +		.needs_nsdelegate = tst_test->needs_cgroup_nsdelegate,
>  	};
>  	const char *const *ctrl_names = tst_test->needs_cgroup_ctrls;

> diff --git a/testcases/kernel/controllers/cgroup/cgroup_core02.c b/testcases/kernel/controllers/cgroup/cgroup_core02.c
> index 1872a7dff..733e88ee7 100644
> --- a/testcases/kernel/controllers/cgroup/cgroup_core02.c
> +++ b/testcases/kernel/controllers/cgroup/cgroup_core02.c
> @@ -121,6 +121,7 @@ static struct tst_test test = {
>  	.needs_root = 1,
>  	.needs_cgroup_ctrls = (const char *const[]){"memory",  NULL},
>  	.needs_cgroup_ver = TST_CG_V2,
> +	.needs_cgroup_nsdelegate = 1,
>  	.tags = (const struct tst_tag[]) {
>  		{"linux-git", "e57457641613"},
>  		{"CVE", "2021-4197"},

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

      reply	other threads:[~2024-07-31  8:07 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-07-30 21:19 [LTP] [PATCH] cgroup_core02: Requires cgroup2 mounted with nsdelegate Edward Liaw via ltp
2024-07-31  8:07 ` Petr Vorel [this message]

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=20240731080718.GA1412835@pevik \
    --to=pvorel@suse.cz \
    --cc=edliaw@google.com \
    --cc=kernel-team@android.com \
    --cc=ltp@lists.linux.it \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox