[PATCH 06/17] cgroup/cpuset: Validate type changes against owned CPUs
From: Guopeng Zhang
Date: Thu Aug 20 2026 - 08:47:31 EST
From: Guopeng Zhang <zhangguopeng@xxxxxxxxxx>
update_prstate() checks effective_xcpus against the housekeeping masks
before changing a partition between root and isolated. effective_xcpus
also contains CPUs granted to valid child partitions, although those
CPUs are not affected by the parent's type change. A child-owned CPU can
therefore reject an otherwise valid change.
Run the nohz_full and boot-domain housekeeping checks against the mask
of CPUs owned by the partition instead.
Fixes: 103b08709e8a ("cgroup/cpuset: Fail if isolated and nohz_full don't leave any housekeeping")
Fixes: b1034a690129 ("cgroup/cpuset: Ensure domain isolated CPUs stay in root or isolated partition")
Signed-off-by: Guopeng Zhang <zhangguopeng@xxxxxxxxxx>
---
kernel/cgroup/cpuset.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c
index 468272baadb2..853942c1afeb 100644
--- a/kernel/cgroup/cpuset.c
+++ b/kernel/cgroup/cpuset.c
@@ -3019,8 +3019,8 @@ static int update_prstate(struct cpuset *cs, int new_prs)
*/
compute_partition_owned_cpumask(cs, tmpmask.new_cpus);
if (((new_prs == PRS_ISOLATED) &&
- !isolated_cpus_can_update(cs->effective_xcpus, NULL)) ||
- prstate_housekeeping_conflict(new_prs, cs->effective_xcpus))
+ !isolated_cpus_can_update(tmpmask.new_cpus, NULL)) ||
+ prstate_housekeeping_conflict(new_prs, tmpmask.new_cpus))
err = PERR_HKEEPING;
else
isolcpus_updated = true;
--
2.43.0