Skip to content

Commit

Permalink
cgroup_core02: Requires cgroup2 mounted with nsdelegate
Browse files Browse the repository at this point in the history
If cgroup2 is not mounted with the nsdelegate option, this test will
fail.  It has been patched in kernel kselftests commit 4793cb599b1b
("selftests: cgroup: skip test_cgcore_lesser_ns_open when cgroup2
mounted without nsdelegate"), therefore port it to LTP as well.

This adds an additional tst_test configuration option,
needs_cgroup_nsdelegate, to check for the mount option.

Link: https://lore.kernel.org/linux-kernel/[email protected]/
Link: https://www.mail-archive.com/[email protected]/msg02400.html
Link: https://lore.kernel.org/ltp/[email protected]/
Reviewed-by: Petr Vorel <[email protected]>
Signed-off-by: Edward Liaw <[email protected]>
Signed-off-by: Petr Vorel <[email protected]>
  • Loading branch information
edliaw authored and pevik committed Jul 31, 2024
1 parent c14abc3 commit 4db8234
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 0 deletions.
1 change: 1 addition & 0 deletions include/tst_cgroup.h
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@ struct tst_cg_opts {
* directory as opposed to the default pid of the calling process.
*/
int test_pid;
int needs_nsdelegate;
};

/* A Control Group in LTP's aggregated hierarchy */
Expand Down
2 changes: 2 additions & 0 deletions include/tst_test.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
};

/**
Expand Down
16 changes: 16 additions & 0 deletions lib/tst_cgroup.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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);
Expand All @@ -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;
Expand Down Expand Up @@ -632,6 +643,7 @@ static void cgroup_root_scan(const char *const mnt_type,
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))
Expand Down Expand Up @@ -869,6 +881,10 @@ void tst_cg_require(const char *const ctrl_name,

mkdirs:
root = ctrl->ctrl_root;

if (options->needs_nsdelegate && cgroup_v2_mounted() && !cgroup_v2_nsdelegate())
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) {
Expand Down
1 change: 1 addition & 0 deletions lib/tst_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down
1 change: 1 addition & 0 deletions testcases/kernel/controllers/cgroup/cgroup_core02.c
Original file line number Diff line number Diff line change
Expand Up @@ -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"},
Expand Down

0 comments on commit 4db8234

Please sign in to comment.