Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit da1f296f authored by Tejun Heo's avatar Tejun Heo
Browse files

cgroup: make cgroup_path() not print double slashes

While reimplementing cgroup_path(), 65dff759 ("cgroup: fix
cgroup_path() vs rename() race") introduced a bug where the path of a
non-root cgroup would have two slahses at the beginning, which is
caused by treating the root cgroup which has the name '/' like
non-root cgroups.

 $ grep systemd /proc/self/cgroup
 1:name=systemd://user/root/1



Fix it by special casing root cgroup case and not looping over it in
the normal path.

Signed-off-by: default avatarTejun Heo <tj@kernel.org>
Cc: Li Zefan <lizefan@huawei.com>
parent 26d5bbe5
Loading
Loading
Loading
Loading
+8 −5
Original line number Diff line number Diff line
@@ -1811,11 +1811,17 @@ int cgroup_path(const struct cgroup *cgrp, char *buf, int buflen)
	int ret = -ENAMETOOLONG;
	char *start;

	if (!cgrp->parent) {
		if (strlcpy(buf, "/", buflen) >= buflen)
			return -ENAMETOOLONG;
		return 0;
	}

	start = buf + buflen - 1;
	*start = '\0';

	rcu_read_lock();
	while (cgrp) {
	do {
		const char *name = cgroup_name(cgrp);
		int len;

@@ -1824,15 +1830,12 @@ int cgroup_path(const struct cgroup *cgrp, char *buf, int buflen)
			goto out;
		memcpy(start, name, len);

		if (!cgrp->parent)
			break;

		if (--start < buf)
			goto out;
		*start = '/';

		cgrp = cgrp->parent;
	}
	} while (cgrp->parent);
	ret = 0;
	memmove(buf, start, buf + buflen - start);
out: