scheduler fixes
Subsystems (3)
Linus,
Please pull the latest sched/urgent git tree from:
git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git sched-urgent-2023-02-17
# HEAD: c2dbe32d5db5c4ead121cf86dabd5ab691fb47fe sched/psi: Fix use-after-free in ep_remove_wait_queue()
Misc scheduler fixes:
- Fix user-after-free bug in call_usermodehelper_exec()
- Fix missing user_cpus_ptr update in __set_cpus_allowed_ptr_locked()
- Fix PSI use-after-free bug in ep_remove_wait_queue()
Thanks,
Ingo
------------------>
Munehisa Kamata (1):
sched/psi: Fix use-after-free in ep_remove_wait_queue()
Peter Zijlstra (1):
freezer,umh: Fix call_usermode_helper_exec() vs SIGKILL
Waiman Long (1):
sched/core: Fix a missed update of user_cpus_ptr
kernel/sched/core.c | 5 ++++- kernel/sched/psi.c | 7 ++++--- kernel/umh.c | 20 +++++++++++++------- 3 files changed, 21 insertions(+), 11 deletions(-)
kernel/sched/core.c +4 -1
@@ -2951,8 +2951,11 @@ static int __set_cpus_allowed_ptr_locked(struct task_struct *p, }if (!(ctx->flags &SCA_MIGRATE_ENABLE )) { -if (cpumask_equal (&p->cpus_mask, ctx->new_mask)) +if (cpumask_equal (&p->cpus_mask, ctx->new_mask)) { +if (ctx->flags &SCA_USER ) +swap (p->user_cpus_ptr, ctx->user_mask); goto out; + } if (WARN_ON_ONCE(p == current && is_migration_disabled(p) &&
kernel/sched/psi.c +4 -3
@@ -1343,10 +1343,11 @@ void psi_trigger_destroy(struct psi_trigger *t) group = t->group;/* -* Wakeup waiters to stop polling. Can happen if cgroup is deleted -* from under a polling process. +* Wakeup waiters to stop polling and clear the queue to prevent it from +* being accessed later. Can happen if cgroup is deleted from under a +* polling process. */ -wake_up_interruptible (&t->event_wait); +wake_up_pollfree (&t->event_wait);mutex_lock (&group->trigger_lock);
kernel/umh.c +13 -7
@@ -438,21 +438,27 @@ int call_usermodehelper_exec(struct subprocess_info *sub_info, int wait)if (wait ==UMH_NO_WAIT )/* task has freed sub_info */ goto unlock; -if (wait &UMH_KILLABLE ) - state |=TASK_KILLABLE ; -if (wait &UMH_FREEZABLE ) state |=TASK_FREEZABLE ; - retval =wait_for_completion_state (&done, state); -if (!retval) - goto wait_done; -if (wait &UMH_KILLABLE ) { + retval =wait_for_completion_state (&done, state |TASK_KILLABLE ); +if (!retval) + goto wait_done; +/* umh_complete() will see NULL and free sub_info */ if (xchg (&sub_info->complete,NULL )) goto unlock; + +/* +* fallthrough; in case of -ERESTARTSYS now do uninterruptible +* wait_for_completion_state(). Since umh_complete() shall call +* complete() in a moment if xchg() above returned NULL, this +* uninterruptible wait_for_completion_state() will not block +* SIGKILL'ed processes for long. +*/ } +wait_for_completion_state (&done, state); wait_done: retval = sub_info->retval;
The pull request you sent on Fri, 17 Feb 2023 08:42:08 +0100:
The pull request you sent on Fri, 17 Feb 2023 08:42:08 +0100:
Quoted 1 line
git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.gitsched-urgent-2023-02-17
has been merged into torvalds/linux.git:
https://git.kernel.org/torvalds/c/64e0253df67d5e1557e82b923c78f1bad185eb9a
Thank you!
Signature · 2 lines
Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/prtracker.html