Blame SOURCES/CVE-2022-0492.patch

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