Blame SOURCES/CVE-2022-0492.patch

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