From 83ea395d5e4bb0dae3e96601cba69dff3023038e Mon Sep 17 00:00:00 2001 From: Cruz Zhao Date: Tue, 5 Mar 2024 11:50:31 +0800 Subject: [PATCH] anolis: sched/core: fix the race condition when disable core sched ANBZ: #8441 There is a race condition between disable __sysctl_sched_core_enabled and clear_all_cookie in function sysctl_sched_core_handler(). If we echo 0 > /proc/sys/kernel/sched_core, and we call prctl to set cookie at the same time, there will be some cookies not cleared. To fix this problem, we disable __sysctl_sched_core_enabled first to prevent new cookies created, and we allow clear cookie when __sysctl_sched_core_enabled is disabled. Fixes: commit 575317e961ef ("anolis: fix the bug that turn off kernel.sched_core doesn't work") Signed-off-by: Cruz Zhao --- kernel/sched/core_sched.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kernel/sched/core_sched.c b/kernel/sched/core_sched.c index 1554763077c7..11a04a80f57f 100644 --- a/kernel/sched/core_sched.c +++ b/kernel/sched/core_sched.c @@ -144,7 +144,7 @@ int sched_core_share_pid(unsigned int cmd, pid_t pid, enum pid_type type, return -ENODEV; if (!static_branch_likely(&__sysctl_sched_core_enabled) && - cmd != PR_SCHED_CORE_GET) + cmd != PR_SCHED_CORE_GET && cmd != PR_SCHED_CORE_CLEAR) return -EPERM; BUILD_BUG_ON(PR_SCHED_CORE_SCOPE_THREAD != PIDTYPE_PID); @@ -309,12 +309,12 @@ int sysctl_sched_core_handler(struct ctl_table *table, int write, static_branch_enable(&__sysctl_sched_core_enabled); sched_check_group_identity_unlock(); } else { + static_branch_disable(&__sysctl_sched_core_enabled); /* * When turn off sched_core, we need to clear cookie of all the tasks, to * make __sched_core_enabled off. */ clear_all_cookie(); - static_branch_disable(&__sysctl_sched_core_enabled); } return err; -- Gitee