[LTP] [PATCH v2] cgroup: Handle trailing new line in cgroup.controllers

Richard Palethorpe rpalethorpe@suse.com
Thu Oct 26 11:49:57 CEST 2023


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: 310da3784 ("Add new CGroups APIs")
Signed-off-by: Richard Palethorpe <rpalethorpe@suse.com>
Cc: Petr Vorel <pvorel@suse.cz>
Cc: Marius Kittler <mkittler@suse.de>
---

V2:
* Add underscore
* Add length check
* Expand commit message
* Use shorter syntax

 lib/tst_cgroup.c | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/lib/tst_cgroup.c b/lib/tst_cgroup.c
index 5240aadaa..c5cb20505 100644
--- a/lib/tst_cgroup.c
+++ b/lib/tst_cgroup.c
@@ -433,9 +433,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;
 	}
 
-- 
2.40.1



More information about the ltp mailing list