lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Date:	Tue, 23 Dec 2008 16:35:28 +0800
From:	Miao Xie <miaox@...fujitsu.com>
To:	Paul Menage <menage@...gle.com>,
	Andrew Morton <akpm@...ux-foundation.org>
CC:	Linux-Kernel <linux-kernel@...r.kernel.org>
Subject: [RFC][PATCH] cpusets: set task's cpu_allowed to cpu_possible_map
 when attaching it into top cpuset

I found a bug on my dual-cpu box. I created a sub cpuset in top cpuset and
assign 1 to its cpus. And then we attach some tasks into this sub cpuset.
After this, we offline CPU1. Now, the tasks in this new cpuset are moved into
top cpuset automatically because there is no cpu in sub cpuset. Then we
online CPU1, we find all the tasks which doesn't belong to top cpuset originally
just run on CPU0.

We fix this bug by setting task's cpu_allowed to cpu_possible_map when attaching
it into top cpuset. This method needn't modify the current behavior of cpusets on
CPU hotplug, and all of tasks in top cpuset use cpu_possible_map to initialize
their cpu_allowed.

Signed-off-by: Miao Xie <miaox@...fujitsu.com>

---
 kernel/cpuset.c |   10 +++++++---
 1 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/kernel/cpuset.c b/kernel/cpuset.c
index 96c0ba1..e087b72 100644
--- a/kernel/cpuset.c
+++ b/kernel/cpuset.c
@@ -1332,10 +1332,14 @@ static void cpuset_attach(struct cgroup_subsys *ss,
 	struct cpuset *oldcs = cgroup_cs(oldcont);
 	int err;
 
-	mutex_lock(&callback_mutex);
-	guarantee_online_cpus(cs, &cpus);
+	if (cs == &top_cpuset) {
+		cpus = cpu_possible_map;
+	} else {
+		mutex_lock(&callback_mutex);
+		guarantee_online_cpus(cs, &cpus);
+		mutex_unlock(&callback_mutex);
+	}
 	err = set_cpus_allowed_ptr(tsk, &cpus);
-	mutex_unlock(&callback_mutex);
 	if (err)
 		return;
 
-- 1.5.4.rc3 

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ