Skip to content

Commit

Permalink
cgroup: Handle trailing new line in cgroup.controllers
Browse files Browse the repository at this point in the history
The last item in cgroup.controllers (misc or rdma in my case)
contained a new line character which caused the controller search to
fail.

This commit avoids including the newline character inside the name
comparison.

The search failure caused the "cgroup_regression_test.sh" test to fail
with a confusing error when it tries to mount a V1 subsys thus
removing the V2 and causing the available set of V2s to change between
scans.

According to the V2 docs subsys names can only include lowercase
characters and '_'. So we strictly look for those characters.

The newline (and delimiting space) is just what the kernel currently
prints. IDK if it is specified anywhere, but if it changes then the
error should be obvious.

Fixes: 310da37 ("Add new CGroups APIs")
Signed-off-by: Richard Palethorpe <[email protected]>
Reviewed-by: Petr Vorel <[email protected]>
Reviewed-by: Marius Kittler <[email protected]>
  • Loading branch information
Richard Palethorpe committed Oct 27, 2023
1 parent 35f77e7 commit 14f2df6
Showing 1 changed file with 12 additions and 1 deletion.
13 changes: 12 additions & 1 deletion lib/tst_cgroup.c
Original file line number Diff line number Diff line change
Expand Up @@ -432,9 +432,20 @@ __attribute__ ((nonnull, warn_unused_result))
static struct cgroup_ctrl *cgroup_find_ctrl(const char *const ctrl_name)
{
struct cgroup_ctrl *ctrl;
int l = 0;
char c = ctrl_name[l];

while (c == '_' || (c >= 'a' && c <= 'z'))
c = ctrl_name[++l];

if (l > 32)
tst_res(TWARN, "Subsys name len greater than max known value of MAX_CGROUP_TYPE_NAMELEN: %d > 32", l);

if (!(c == '\n' || c == '\0'))
tst_brk(TBROK, "Unexpected char in %s: %c", ctrl_name, c);

for_each_ctrl(ctrl) {
if (!strcmp(ctrl_name, ctrl->ctrl_name))
if (!strncmp(ctrl_name, ctrl->ctrl_name, l))
return ctrl;
}

Expand Down

0 comments on commit 14f2df6

Please sign in to comment.