Michal Koutný 31d330
From: Alexander Kuznetsov <wwfq@yandex-team.ru>
Michal Koutný 31d330
Date: Wed, 9 Jun 2021 10:17:19 +0300
Michal Koutný 31d330
Subject: cgroup1: don't allow '\n' in renaming
Michal Koutný 31d330
Git-commit: b7e24eb1caa5f8da20d405d262dba67943aedc42
Michal Koutný 31d330
Patch-mainline: v5.13-rc6
Michal Koutný 31d330
References: bsc#1187972
Michal Koutný 31d330
Michal Koutný 31d330
cgroup_mkdir() have restriction on newline usage in names:
Michal Koutný 31d330
$ mkdir $'/sys/fs/cgroup/cpu/test\ntest2'
Michal Koutný 31d330
mkdir: cannot create directory
Michal Koutný 31d330
'/sys/fs/cgroup/cpu/test\ntest2': Invalid argument
Michal Koutný 31d330
Michal Koutný 31d330
But in cgroup1_rename() such check is missed.
Michal Koutný 31d330
This allows us to make /proc/<pid>/cgroup unparsable:
Michal Koutný 31d330
$ mkdir /sys/fs/cgroup/cpu/test
Michal Koutný 31d330
$ mv /sys/fs/cgroup/cpu/test $'/sys/fs/cgroup/cpu/test\ntest2'
Michal Koutný 31d330
$ echo $$ > $'/sys/fs/cgroup/cpu/test\ntest2'
Michal Koutný 31d330
$ cat /proc/self/cgroup
Michal Koutný 31d330
11:pids:/
Michal Koutný 31d330
10:freezer:/
Michal Koutný 31d330
9:hugetlb:/
Michal Koutný 31d330
8:cpuset:/
Michal Koutný 31d330
7:blkio:/user.slice
Michal Koutný 31d330
6:memory:/user.slice
Michal Koutný 31d330
5:net_cls,net_prio:/
Michal Koutný 31d330
4:perf_event:/
Michal Koutný 31d330
3:devices:/user.slice
Michal Koutný 31d330
2:cpu,cpuacct:/test
Michal Koutný 31d330
test2
Michal Koutný 31d330
1:name=systemd:/
Michal Koutný 31d330
0::/
Michal Koutný 31d330
Michal Koutný 31d330
Signed-off-by: Alexander Kuznetsov <wwfq@yandex-team.ru>
Michal Koutný 31d330
Reported-by: Andrey Krasichkov <buglloc@yandex-team.ru>
Michal Koutný 31d330
Acked-by: Dmitry Yakunin <zeil@yandex-team.ru>
Michal Koutný 31d330
Cc: stable@vger.kernel.org
Michal Koutný 31d330
Signed-off-by: Tejun Heo <tj@kernel.org>
Michal Koutný 31d330
Acked-by: Michal Koutný <mkoutny@suse.com>
Michal Koutný 31d330
---
Michal Koutný 31d330
 kernel/cgroup/cgroup-v1.c | 4 ++++
Michal Koutný 31d330
 1 file changed, 4 insertions(+)
Michal Koutný 31d330
Michal Koutný 31d330
diff --git a/kernel/cgroup/cgroup-v1.c b/kernel/cgroup/cgroup-v1.c
Michal Koutný 31d330
index 8190b6bfc9784..1f274d7fc934e 100644
Michal Koutný 31d330
--- a/kernel/cgroup/cgroup-v1.c
Michal Koutný 31d330
+++ b/kernel/cgroup/cgroup-v1.c
Michal Koutný 31d330
@@ -820,6 +820,10 @@ static int cgroup1_rename(struct kernfs_node *kn, struct kernfs_node *new_parent
Michal Koutný 31d330
 	struct cgroup *cgrp = kn->priv;
Michal Koutný 31d330
 	int ret;
Michal Koutný 31d330
 
Michal Koutný 31d330
+	/* do not accept '\n' to prevent making /proc/<pid>/cgroup unparsable */
Michal Koutný 31d330
+	if (strchr(new_name_str, '\n'))
Michal Koutný 31d330
+		return -EINVAL;
Michal Koutný 31d330
+
Michal Koutný 31d330
 	if (kernfs_type(kn) != KERNFS_DIR)
Michal Koutný 31d330
 		return -ENOTDIR;
Michal Koutný 31d330
 	if (kn->parent != new_parent)
Michal Koutný 31d330