Blame SOURCES/CVE-2022-0492.patch

20fa05
From d6dc1581c25221b17e1447f5eea0ee156a69e986 Mon Sep 17 00:00:00 2001
20fa05
From: Joe Lawrence <joe.lawrence@redhat.com>
20fa05
Date: Fri, 25 Mar 2022 14:49:39 -0400
20fa05
Subject: [KPATCH CVE-2022-0492] cgroup-v1: kpatch fixes for CVE-2022-0492
20fa05
Content-type: text/plain
20fa05
20fa05
Kernels:
20fa05
3.10.0-1160.24.1.el7
20fa05
3.10.0-1160.25.1.el7
20fa05
3.10.0-1160.31.1.el7
20fa05
3.10.0-1160.36.2.el7
20fa05
3.10.0-1160.41.1.el7
20fa05
3.10.0-1160.42.2.el7
20fa05
3.10.0-1160.45.1.el7
20fa05
3.10.0-1160.49.1.el7
20fa05
3.10.0-1160.53.1.el7
20fa05
3.10.0-1160.59.1.el7
20fa05
20fa05
Changes since last build:
20fa05
arches: x86_64 ppc64le
20fa05
cgroup.o: changed function: cgroup_release_agent_write
20fa05
cgroup.o: changed function: parse_cgroupfs_options
20fa05
---------------------------
20fa05
20fa05
Kpatch-MR: https://gitlab.com/redhat/prdsc/rhel/src/kpatch/rhel-7/-/merge_requests/36
20fa05
Approved-by: Yannick Cote (@ycote1)
20fa05
Modifications: none
20fa05
20fa05
commit a1d7f90e939b5ca2fddb1e295c6cf8bfb97a69f0
20fa05
Author: Waiman Long <longman@redhat.com>
20fa05
Date:   Wed Feb 9 09:23:49 2022 -0500
20fa05
20fa05
    cgroup-v1: Require capabilities to set release_agent
20fa05
20fa05
    Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2052162
20fa05
    CVE: CVE-2022-0492
20fa05
    Conflicts:
20fa05
     1) For RHEL7, the right file to be modified is kernel/cgroup.c.
20fa05
     2) The cgroup filesystem files in RHEL7 are created via direct
20fa05
        manipulation of dentries and inode and credential at the time of
20fa05
        creation are not stored. So the init_user_ns comparison check in
20fa05
        the upstream commit isn't applicable. It is also less important
20fa05
        and so the checks are dropped.
20fa05
     3) The cgroup mount parameter parsing is done in
20fa05
        parse_cgroupfs_options() instead.
20fa05
20fa05
    commit 24f6008564183aa120d07c03d9289519c2fe02af
20fa05
    Author: Eric W. Biederman <ebiederm@xmission.com>
20fa05
    Date:   Thu, 20 Jan 2022 11:04:01 -0600
20fa05
20fa05
        cgroup-v1: Require capabilities to set release_agent
20fa05
20fa05
        The cgroup release_agent is called with call_usermodehelper.  The function
20fa05
        call_usermodehelper starts the release_agent with a full set fo capabilities.
20fa05
        Therefore require capabilities when setting the release_agaent.
20fa05
20fa05
        Reported-by: Tabitha Sable <tabitha.c.sable@gmail.com>
20fa05
        Tested-by: Tabitha Sable <tabitha.c.sable@gmail.com>
20fa05
        Fixes: 81a6a5cdd2c5 ("Task Control Groups: automatic userspace notification of idle cgroups")
20fa05
        Cc: stable@vger.kernel.org # v2.6.24+
20fa05
        Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
20fa05
        Signed-off-by: Tejun Heo <tj@kernel.org>
20fa05
20fa05
    Signed-off-by: Waiman Long <longman@redhat.com>
20fa05
20fa05
Signed-off-by: Joe Lawrence <joe.lawrence@redhat.com>
20fa05
---
20fa05
 kernel/cgroup.c | 15 +++++++++++++++
20fa05
 1 file changed, 15 insertions(+)
20fa05
20fa05
diff --git a/kernel/cgroup.c b/kernel/cgroup.c
20fa05
index 4777d5bc3142..e4138e5a7879 100644
20fa05
--- a/kernel/cgroup.c
20fa05
+++ b/kernel/cgroup.c
20fa05
@@ -1149,6 +1149,13 @@ static int parse_cgroupfs_options(char *data, struct cgroup_sb_opts *opts)
20fa05
 			/* Specifying two release agents is forbidden */
20fa05
 			if (opts->release_agent)
20fa05
 				return -EINVAL;
20fa05
+			/*
20fa05
+			 * Release agent gets called with all capabilities,
20fa05
+			 * require capabilities to set release agent.
20fa05
+			 */
20fa05
+			if (!capable(CAP_SYS_ADMIN))
20fa05
+				return -EPERM;
20fa05
+
20fa05
 			opts->release_agent =
20fa05
 				kstrndup(token + 14, PATH_MAX - 1, GFP_KERNEL);
20fa05
 			if (!opts->release_agent)
20fa05
@@ -2196,6 +2203,14 @@ static int cgroup_release_agent_write(struct cgroup *cgrp, struct cftype *cft,
20fa05
 	BUILD_BUG_ON(sizeof(cgrp->root->release_agent_path) < PATH_MAX);
20fa05
 	if (strlen(buffer) >= PATH_MAX)
20fa05
 		return -EINVAL;
20fa05
+
20fa05
+	/*
20fa05
+	 * Release agent gets called with all capabilities,
20fa05
+	 * require capabilities to set release agent.
20fa05
+	 */
20fa05
+	if (!capable(CAP_SYS_ADMIN))
20fa05
+		return -EPERM;
20fa05
+
20fa05
 	if (!cgroup_lock_live_group(cgrp))
20fa05
 		return -ENODEV;
20fa05
 	mutex_lock(&cgroup_root_mutex);
20fa05
-- 
20fa05
2.26.3
20fa05
20fa05