aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-12-02 22:07:57 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-12-02 22:07:57 +0000
commit159fc967c5adc6ae9669e9a9d0f50d6e30c9f610 (patch)
treed2c7b84af05f0902505ea40be54f01c1189e6f51
parent9e8f0d734701e351e46c877c7b82cb7b029f6c95 (diff)
parent8a732acc820f62f186f63747268f53ca64fdf607 (diff)
downloadltp-android14-qpr2-s4-release.tar.gz
Change-Id: If9f8874da80c9e5987f32133df68286e3322f9b3
-rw-r--r--lib/tst_cgroup.c32
1 files changed, 24 insertions, 8 deletions
diff --git a/lib/tst_cgroup.c b/lib/tst_cgroup.c
index 5240aadaa..6e9ab372d 100644
--- a/lib/tst_cgroup.c
+++ b/lib/tst_cgroup.c
@@ -430,12 +430,28 @@ void tst_cg_print_config(void)
}
__attribute__ ((nonnull, warn_unused_result))
-static struct cgroup_ctrl *cgroup_find_ctrl(const char *const ctrl_name)
+static struct cgroup_ctrl *cgroup_find_ctrl(const char *const ctrl_name,
+ unsigned int strict)
{
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 && strict)
+ tst_res(TWARN, "Subsys name len greater than max known value of MAX_CGROUP_TYPE_NAMELEN: %d > 32", l);
+
+ if (!(c == '\n' || c == '\0')) {
+ if (!strict)
+ return NULL;
+
+ 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;
}
@@ -468,7 +484,7 @@ static void cgroup_parse_config_line(const char *const config_entry)
if (vars_read != 7)
tst_brk(TBROK, "Incorrect number of vars read from config. Config possibly malformed?");
- ctrl = cgroup_find_ctrl(ctrl_name);
+ ctrl = cgroup_find_ctrl(ctrl_name, 1);
if (!ctrl)
tst_brk(TBROK, "Could not find ctrl from config. Ctrls changing between calls?");
@@ -561,7 +577,7 @@ static void cgroup_root_scan(const char *const mnt_type,
SAFE_FILE_READAT(mnt_dfd, "cgroup.controllers", buf, sizeof(buf));
for (tok = strtok(buf, " "); tok; tok = strtok(NULL, " ")) {
- const_ctrl = cgroup_find_ctrl(tok);
+ const_ctrl = cgroup_find_ctrl(tok, 1);
if (const_ctrl)
add_ctrl(&ctrl_field, const_ctrl);
}
@@ -578,7 +594,7 @@ static void cgroup_root_scan(const char *const mnt_type,
v1:
for (tok = strtok(mnt_opts, ","); tok; tok = strtok(NULL, ",")) {
- const_ctrl = cgroup_find_ctrl(tok);
+ const_ctrl = cgroup_find_ctrl(tok, 0);
if (const_ctrl)
add_ctrl(&ctrl_field, const_ctrl);
@@ -805,7 +821,7 @@ void tst_cg_require(const char *const ctrl_name,
const struct tst_cg_opts *options)
{
const char *const cgsc = "cgroup.subtree_control";
- struct cgroup_ctrl *const ctrl = cgroup_find_ctrl(ctrl_name);
+ struct cgroup_ctrl *const ctrl = cgroup_find_ctrl(ctrl_name, 1);
struct cgroup_root *root;
int base = !strcmp(ctrl->ctrl_name, "base");
@@ -1161,7 +1177,7 @@ static const struct cgroup_file *cgroup_file_find(const char *const file,
memcpy(ctrl_name, file_name, len);
ctrl_name[len] = '\0';
- ctrl = cgroup_find_ctrl(ctrl_name);
+ ctrl = cgroup_find_ctrl(ctrl_name, 1);
if (!ctrl) {
tst_brk_(file, lineno, TBROK,
@@ -1188,7 +1204,7 @@ enum tst_cg_ver tst_cg_ver(const char *const file, const int lineno,
const struct tst_cg_group *const cg,
const char *const ctrl_name)
{
- const struct cgroup_ctrl *const ctrl = cgroup_find_ctrl(ctrl_name);
+ const struct cgroup_ctrl *const ctrl = cgroup_find_ctrl(ctrl_name, 1);
const struct cgroup_dir *dir;
if (!strcmp(ctrl_name, "cgroup")) {