提交 f854c559 编写于 作者: A Andrea Bolognani

host-validate: Be more careful when checking for cgroup mounts

The existing code is built on the assumption that no cgroup
name can appear as part of another cgroup name; moreover, cgroups
are expected to always be listed in a specific order.

If that's not the case, eg. 'cpuacct' is listed before 'cpu', the
algorithm fails to detect the cgroup mount point.

Rewrite it to get rid of such assumptions.
上级 4572997a
......@@ -343,16 +343,24 @@ static int virHostValidateCGroupMount(const char *hvname,
goto error;
while (getmntent_r(fp, &ent, mntbuf, sizeof(mntbuf)) && !matched) {
char *tmp = strstr(ent.mnt_opts, cg_name);
if (!tmp)
char **opts;
size_t nopts;
size_t i;
/* Ignore non-cgroup mounts */
if (STRNEQ(ent.mnt_type, "cgroup"))
continue;
tmp += strlen(cg_name);
if (*tmp != ',' &&
*tmp != '\0')
if (!(opts = virStringSplitCount(ent.mnt_opts, ",", 0, &nopts)))
continue;
matched = true;
/* Look for a mount option matching the cgroup name */
for (i = 0; i < nopts; i++) {
if (STREQ(opts[i], cg_name))
matched = true;
}
virStringFreeListCount(opts, nopts);
}
endmntent(fp);
if (!matched)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册