Tetsuo Handa
3756171b97
cgroup,freezer: hold cpu_hotplug_lock before freezer_mutex
[ Upstream commit 57dcd64c7e ]
syzbot is reporting circular locking dependency between cpu_hotplug_lock
and freezer_mutex, for commit f5d39b0208 ("freezer,sched: Rewrite core
freezer logic") replaced atomic_inc() in freezer_apply_state() with
static_branch_inc() which holds cpu_hotplug_lock.
cpu_hotplug_lock => cgroup_threadgroup_rwsem => freezer_mutex
cgroup_file_write() {
cgroup_procs_write() {
__cgroup_procs_write() {
cgroup_procs_write_start() {
cgroup_attach_lock() {
cpus_read_lock() {
percpu_down_read(&cpu_hotplug_lock);
}
percpu_down_write(&cgroup_threadgroup_rwsem);
}
}
cgroup_attach_task() {
cgroup_migrate() {
cgroup_migrate_execute() {
freezer_attach() {
mutex_lock(&freezer_mutex);
(...snipped...)
}
}
}
}
(...snipped...)
}
}
}
freezer_mutex => cpu_hotplug_lock
cgroup_file_write() {
freezer_write() {
freezer_change_state() {
mutex_lock(&freezer_mutex);
freezer_apply_state() {
static_branch_inc(&freezer_active) {
static_key_slow_inc() {
cpus_read_lock();
static_key_slow_inc_cpuslocked();
cpus_read_unlock();
}
}
}
mutex_unlock(&freezer_mutex);
}
}
}
Swap locking order by moving cpus_read_lock() in freezer_apply_state()
to before mutex_lock(&freezer_mutex) in freezer_change_state().
Reported-by: syzbot <syzbot+c39682e86c9d84152f93@syzkaller.appspotmail.com>
Link: https://syzkaller.appspot.com/bug?extid=c39682e86c9d84152f93
Suggested-by: Hillf Danton <hdanton@sina.com>
Fixes: f5d39b0208 ("freezer,sched: Rewrite core freezer logic")
Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Mukesh Ojha <quic_mojha@quicinc.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2023-04-20 12:35:09 +02:00
..
2023-03-30 12:49:08 +02:00
2023-04-20 12:35:09 +02:00
2022-09-28 09:02:20 +02:00
2022-09-26 19:46:18 -07:00
2022-10-10 17:53:04 -07:00
2023-03-30 12:49:13 +02:00
2023-04-13 16:55:32 +02:00
2023-01-04 11:28:58 +01:00
2022-12-31 13:33:11 +01:00
2023-03-11 13:55:29 +01:00
2023-04-06 12:10:35 +02:00
2022-10-10 11:36:19 -07:00
2023-03-10 09:34:06 +01:00
2023-02-01 08:34:37 +01:00
2023-03-10 09:33:53 +01:00
2023-03-11 13:55:32 +01:00
2023-03-10 09:33:48 +01:00
2023-04-06 12:10:40 +02:00
2023-03-10 09:33:52 +01:00
2023-04-13 16:55:36 +02:00
2022-12-31 13:32:58 +01:00
2022-02-03 11:20:34 -08:00
2022-08-22 18:50:06 -04:00
2022-04-25 14:37:28 +02:00
2022-09-01 17:39:30 -04:00
2022-08-29 19:47:03 -04:00
2022-09-07 11:30:15 -04:00
2022-01-11 13:08:21 -08:00
2022-10-04 11:05:43 -07:00
2022-09-26 19:46:09 -07:00
2022-03-09 10:32:06 -08:00
2022-09-26 10:13:13 -07:00
2023-04-06 12:10:40 +02:00
2023-03-10 09:33:45 +01:00
2022-07-05 13:32:59 -07:00
2022-12-31 13:31:59 +01:00
2022-08-28 14:02:44 -07:00
2022-03-15 10:32:44 +01:00
2022-09-26 19:46:07 -07:00
2023-03-10 09:33:45 +01:00
2022-07-05 13:32:59 -07:00
2023-03-11 13:55:39 +01:00
2023-04-13 16:55:40 +02:00
2022-09-07 21:53:50 +02:00
2022-09-29 04:40:15 +09:00
2022-07-15 18:21:49 +00:00
2022-09-30 16:50:39 +02:00
2022-04-15 14:49:55 -07:00
2022-06-24 09:48:55 +02:00
2022-07-17 17:31:39 -07:00
2022-10-03 17:11:07 -07:00
2021-08-17 17:50:51 +02:00
2022-03-31 10:36:55 +02:00
2022-10-03 14:03:23 -07:00
2022-09-11 21:55:08 -07:00
2022-09-11 21:55:06 -07:00
2022-09-11 21:55:06 -07:00
2022-09-11 21:55:06 -07:00
2023-03-10 09:34:27 +01:00
2022-09-11 21:55:06 -07:00
2022-10-09 16:01:59 -07:00
2022-09-11 21:55:12 -07:00
2022-12-31 13:33:08 +01:00
2022-05-19 19:30:30 +02:00
2022-09-13 10:38:43 -07:00
2022-12-31 13:32:34 +01:00
2023-03-10 09:34:25 +01:00
2021-12-28 11:26:18 +01:00
2023-03-10 09:32:52 +01:00
2022-06-29 13:07:16 +02:00
2022-09-11 21:55:12 -07:00
2022-09-07 21:53:50 +02:00
2022-10-04 15:59:36 +02:00
2022-12-31 13:32:00 +01:00
2023-03-10 09:34:25 +01:00
2022-11-14 09:58:32 +01:00
2022-04-11 17:07:29 -07:00
2022-03-24 19:06:48 -07:00
2022-05-03 14:11:58 -07:00
2022-10-10 09:10:28 -07:00
2022-10-10 12:49:34 -07:00
2022-09-11 21:55:10 -07:00
2022-07-05 13:32:59 -07:00
2022-05-08 01:33:09 -07:00
2022-02-25 09:36:06 +01:00
2022-04-05 09:59:38 +02:00
2022-04-05 09:59:38 +02:00
2022-05-24 11:11:13 -07:00
2022-08-20 15:17:45 -07:00
2023-01-24 07:24:34 +01:00
2022-09-08 16:56:45 -07:00
2022-12-05 12:09:06 -08:00
2022-09-11 21:55:10 -07:00
2022-08-29 12:47:15 +01:00
2023-03-10 09:34:07 +01:00
2022-09-26 13:01:18 -04:00
2022-04-29 14:38:03 -07:00
2022-05-18 18:24:57 -05:00
2023-02-22 12:59:50 +01:00
2022-10-09 16:24:05 -07:00
2021-09-08 11:50:27 -07:00
2022-05-19 23:25:47 -04:00
2022-10-23 12:01:01 -07:00
2023-03-17 08:50:30 +01:00
2022-06-23 18:41:40 +02:00
2022-08-06 16:38:17 -07:00
2021-08-17 07:49:10 -10:00
2023-03-10 09:32:53 +01:00