Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 91151228 authored by Oleg Nesterov's avatar Oleg Nesterov Committed by Tejun Heo
Browse files

workqueue: swap set_cpus_allowed_ptr() and PF_NO_SETAFFINITY



Move the setting of PF_NO_SETAFFINITY up before set_cpus_allowed()
in create_worker(). Otherwise userland can change ->cpus_allowed
in between.

Signed-off-by: default avatarOleg Nesterov <oleg@redhat.com>
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
parent 6ce4eac1
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -1736,16 +1736,17 @@ static struct worker *create_worker(struct worker_pool *pool)
	if (IS_ERR(worker->task))
		goto fail;

	set_user_nice(worker->task, pool->attrs->nice);

	/* prevent userland from meddling with cpumask of workqueue workers */
	worker->task->flags |= PF_NO_SETAFFINITY;

	/*
	 * set_cpus_allowed_ptr() will fail if the cpumask doesn't have any
	 * online CPUs.  It'll be re-applied when any of the CPUs come up.
	 */
	set_user_nice(worker->task, pool->attrs->nice);
	set_cpus_allowed_ptr(worker->task, pool->attrs->cpumask);

	/* prevent userland from meddling with cpumask of workqueue workers */
	worker->task->flags |= PF_NO_SETAFFINITY;

	/*
	 * The caller is responsible for ensuring %POOL_DISASSOCIATED
	 * remains stable across this function.  See the comments above the