[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20241012072246.158766-1-xiujianfeng@huaweicloud.com>
Date: Sat, 12 Oct 2024 07:22:46 +0000
From: Xiu Jianfeng <xiujianfeng@...weicloud.com>
To: tj@...nel.org,
lizefan.x@...edance.com,
hannes@...xchg.org,
mkoutny@...e.com,
roman.gushchin@...ux.dev
Cc: cgroups@...r.kernel.org,
linux-kernel@...r.kernel.org,
wangweiyang2@...wei.com
Subject: [PATCH] cgroup: Fix potential overflow issue when checking max_depth
From: Xiu Jianfeng <xiujianfeng@...wei.com>
cgroup.max.depth is the maximum allowed descent depth below the current
cgroup. If the actual descent depth is equal or larger, an attempt to
create a new child cgroup will fail. However due to the cgroup->max_depth
is of int type and having the default value INT_MAX, the condition
'level > cgroup->max_depth' will never be satisfied, and it will cause
an overflow of the level after it reaches to INT_MAX.
Fix it by starting the level from 0 and using '>=' instead.
It's worth mentioning that this issue is unlikely to occur in reality,
as it's impossible to have a depth of INT_MAX hierarchy, but should be
be avoided logically.
Fixes: 1a926e0bbab8 ("cgroup: implement hierarchy limits")
Signed-off-by: Xiu Jianfeng <xiujianfeng@...wei.com>
---
kernel/cgroup/cgroup.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c
index 5886b95c6eae..044c7ba1cc48 100644
--- a/kernel/cgroup/cgroup.c
+++ b/kernel/cgroup/cgroup.c
@@ -5789,7 +5789,7 @@ static bool cgroup_check_hierarchy_limits(struct cgroup *parent)
{
struct cgroup *cgroup;
int ret = false;
- int level = 1;
+ int level = 0;
lockdep_assert_held(&cgroup_mutex);
@@ -5797,7 +5797,7 @@ static bool cgroup_check_hierarchy_limits(struct cgroup *parent)
if (cgroup->nr_descendants >= cgroup->max_descendants)
goto fail;
- if (level > cgroup->max_depth)
+ if (level >= cgroup->max_depth)
goto fail;
level++;
--
2.34.1
Powered by blists - more mailing lists