mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-18 03:06:43 +00:00
cpuset: Fix unsafe lock order between cpuset lock and cpuslock
The backport commit 4eec5fe1c680a ("cgroup/cpuset: Fix a race between cpuset_attach() and cpu hotplug") looks suspicious since it comes before commit d74b27d63a8b ("cgroup/cpuset: Change cpuset_rwsem and hotplug lock order") v5.4-rc1~176^2~30 when the locking order was: cpuset lock, cpus lock. Fix it with the correct locking order and reduce the cpus locking range because only set_cpus_allowed_ptr() needs the protection of cpus lock. Fixes: 4eec5fe1c680a ("cgroup/cpuset: Fix a race between cpuset_attach() and cpu hotplug") Reported-by: Michal Koutný <mkoutny@suse.com> Signed-off-by: Zhang Qiao <zhangqiao22@huawei.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
1ba1ec1946
commit
aa44002e7d
@ -1528,9 +1528,13 @@ static void cpuset_attach(struct cgroup_taskset *tset)
|
||||
cgroup_taskset_first(tset, &css);
|
||||
cs = css_cs(css);
|
||||
|
||||
cpus_read_lock();
|
||||
mutex_lock(&cpuset_mutex);
|
||||
|
||||
/*
|
||||
* It should hold cpus lock because a cpu offline event can
|
||||
* cause set_cpus_allowed_ptr() failed.
|
||||
*/
|
||||
get_online_cpus();
|
||||
/* prepare for attach */
|
||||
if (cs == &top_cpuset)
|
||||
cpumask_copy(cpus_attach, cpu_possible_mask);
|
||||
@ -1549,6 +1553,7 @@ static void cpuset_attach(struct cgroup_taskset *tset)
|
||||
cpuset_change_task_nodemask(task, &cpuset_attach_nodemask_to);
|
||||
cpuset_update_task_spread_flag(cs, task);
|
||||
}
|
||||
put_online_cpus();
|
||||
|
||||
/*
|
||||
* Change mm for all threadgroup leaders. This is expensive and may
|
||||
@ -1584,7 +1589,6 @@ static void cpuset_attach(struct cgroup_taskset *tset)
|
||||
wake_up(&cpuset_attach_wq);
|
||||
|
||||
mutex_unlock(&cpuset_mutex);
|
||||
cpus_read_unlock();
|
||||
}
|
||||
|
||||
/* The various types of files and directories in a cpuset file system */
|
||||
|
Loading…
x
Reference in New Issue
Block a user