Blame SOURCES/CVE-2022-0492.patch

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