]> git.ipfire.org Git - thirdparty/libcgroup.git/commitdiff
api.c: avoid ambiguous controller name matches
authorliupan <490021209@qq.com>
Wed, 6 Jul 2022 20:01:29 +0000 (14:01 -0600)
committerTom Hromatka <tom.hromatka@oracle.com>
Wed, 6 Jul 2022 20:01:34 +0000 (14:01 -0600)
calling "hasmntopt" to determine if the controller name exists in
"mntopt", may cause errors because of "hasmntopt" only match substring.

cpu controller may incorrectly match to cpuset when cpuset mount info
appeared before cpu,cpuacct in "/proc/mounts", so we need to validate
the last character to make sure the controller name matches exactly.

Signed-off-by: liupan <490021209@qq.com>
Reviewed-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
(cherry picked from commit a18ae861e77f106517df203e30a810ba59b082d9)

src/api.c

index db1f5a531454292ec69598ed13fb9f14ccd132fd..fd14372a7481f5635769d73d5d7c69ddeed0a0e1 100644 (file)
--- a/src/api.c
+++ b/src/api.c
@@ -1074,6 +1074,7 @@ STATIC int cgroup_process_v1_mnt(char *controllers[], struct mntent *ent,
        char *strtok_buffer = NULL, *mntopt = NULL;
        int duplicate = 0;
        int i, j, ret = 0;
+       char c = 0;
 
        for (i = 0; controllers[i] != NULL; i++) {
                mntopt = hasmntopt(ent, controllers[i]);
@@ -1081,6 +1082,11 @@ STATIC int cgroup_process_v1_mnt(char *controllers[], struct mntent *ent,
                if (!mntopt)
                        continue;
 
+               c = mntopt[strlen(controllers[i])];
+
+               if (c != '\0' && c != ',')
+                       continue;
+
                cgroup_dbg("found %s in %s\n", controllers[i], ent->mnt_opts);
 
                /* do not have duplicates in mount table */