summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Koutný <mkoutny@suse.com>2022-08-26 18:52:35 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2022-10-21 12:38:58 +0200
commit28b42357bd168c1499a154b7a3f14f44f4e5a096 (patch)
treeaf8546f8b527cc288083d524ecbacfad02a3cf2a
parent4f7897924fdcc6b1fcdc19fd4d9f9e96b0235973 (diff)
downloadlinux-stable-28b42357bd168c1499a154b7a3f14f44f4e5a096.tar.gz
linux-stable-28b42357bd168c1499a154b7a3f14f44f4e5a096.tar.bz2
linux-stable-28b42357bd168c1499a154b7a3f14f44f4e5a096.zip
cgroup: Honor caller's cgroup NS when resolving path
[ Upstream commit 74e4b956eb1cac0e4c10c240339b1bbfbc9a4c48 ] cgroup_get_from_path() is not widely used function. Its callers presume the path is resolved under cgroup namespace. (There is one caller currently and resolving in init NS won't make harm (netfilter). However, future users may be subject to different effects when resolving globally.) Since, there's currently no use for the global resolution, modify the existing function to take cgroup NS into account. Fixes: a79a908fd2b0 ("cgroup: introduce cgroup namespaces") Signed-off-by: Michal Koutný <mkoutny@suse.com> Signed-off-by: Tejun Heo <tj@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
-rw-r--r--kernel/cgroup/cgroup.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c
index 5f2090d051ac..29296a6374ef 100644
--- a/kernel/cgroup/cgroup.c
+++ b/kernel/cgroup/cgroup.c
@@ -6638,8 +6638,12 @@ struct cgroup *cgroup_get_from_path(const char *path)
{
struct kernfs_node *kn;
struct cgroup *cgrp = ERR_PTR(-ENOENT);
+ struct cgroup *root_cgrp;
- kn = kernfs_walk_and_get(cgrp_dfl_root.cgrp.kn, path);
+ spin_lock_irq(&css_set_lock);
+ root_cgrp = current_cgns_cgroup_from_root(&cgrp_dfl_root);
+ kn = kernfs_walk_and_get(root_cgrp->kn, path);
+ spin_unlock_irq(&css_set_lock);
if (!kn)
goto out;