diff options
author | Kirill Tkhai <ktkhai@parallels.com> | 2014-09-22 14:36:36 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2014-09-24 08:47:11 -0400 |
commit | f1e3a0932f3a9554371792a7daaf1e0eb19f66d5 (patch) | |
tree | c7f93a1b06055de285395c036da15f43f4743124 /kernel/sched/core.c | |
parent | 16303ab2fe214635240a8f57cad2cd29792d4e3b (diff) |
sched: Use rq->rd in sched_setaffinity() under RCU read lock
Probability of use-after-free isn't zero in this place.
Signed-off-by: Kirill Tkhai <ktkhai@parallels.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: <stable@vger.kernel.org> # v3.14+
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Link: http://lkml.kernel.org/r/20140922183636.11015.83611.stgit@localhost
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'kernel/sched/core.c')
-rw-r--r-- | kernel/sched/core.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 316127acefc6..b5349fee1213 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c | |||
@@ -4049,13 +4049,14 @@ long sched_setaffinity(pid_t pid, const struct cpumask *in_mask) | |||
4049 | * root_domain. | 4049 | * root_domain. |
4050 | */ | 4050 | */ |
4051 | #ifdef CONFIG_SMP | 4051 | #ifdef CONFIG_SMP |
4052 | if (task_has_dl_policy(p)) { | 4052 | if (task_has_dl_policy(p) && dl_bandwidth_enabled()) { |
4053 | const struct cpumask *span = task_rq(p)->rd->span; | 4053 | rcu_read_lock(); |
4054 | 4054 | if (!cpumask_subset(task_rq(p)->rd->span, new_mask)) { | |
4055 | if (dl_bandwidth_enabled() && !cpumask_subset(span, new_mask)) { | ||
4056 | retval = -EBUSY; | 4055 | retval = -EBUSY; |
4056 | rcu_read_unlock(); | ||
4057 | goto out_free_new_mask; | 4057 | goto out_free_new_mask; |
4058 | } | 4058 | } |
4059 | rcu_read_unlock(); | ||
4059 | } | 4060 | } |
4060 | #endif | 4061 | #endif |
4061 | again: | 4062 | again: |