diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-12-02 22:07:57 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-12-02 22:07:57 +0000 |
commit | 159fc967c5adc6ae9669e9a9d0f50d6e30c9f610 (patch) | |
tree | d2c7b84af05f0902505ea40be54f01c1189e6f51 | |
parent | 9e8f0d734701e351e46c877c7b82cb7b029f6c95 (diff) | |
parent | 8a732acc820f62f186f63747268f53ca64fdf607 (diff) | |
download | ltp-android14-qpr2-s4-release.tar.gz |
Snap for 11171107 from 8a732acc820f62f186f63747268f53ca64fdf607 to 24Q1-releaseandroid-14.0.0_r37android-14.0.0_r36android-14.0.0_r35android-14.0.0_r34android-14.0.0_r33android-14.0.0_r32android-14.0.0_r31android-14.0.0_r30android-14.0.0_r29android14-qpr2-s5-releaseandroid14-qpr2-s4-releaseandroid14-qpr2-s3-releaseandroid14-qpr2-s2-releaseandroid14-qpr2-s1-releaseandroid14-qpr2-release
Change-Id: If9f8874da80c9e5987f32133df68286e3322f9b3
-rw-r--r-- | lib/tst_cgroup.c | 32 |
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")) { |