mirror of
https://github.com/torvalds/linux.git
synced 2026-06-09 07:03:37 +02:00
sched: Don't use possibly stale sched_class
commit 83ab0aa0d5 upstream.
setscheduler() saves task->sched_class outside of the rq->lock held
region for a check after the setscheduler changes have become
effective. That might result in checking a stale value.
rtmutex_setprio() has the same problem, though it is protected by
p->pi_lock against setscheduler(), but for correctness sake (and to
avoid bad examples) it needs to be fixed as well.
Retrieve task->sched_class inside of the rq->lock held region.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
76d0713625
commit
04833a6a2d
|
|
@ -6009,7 +6009,7 @@ void rt_mutex_setprio(struct task_struct *p, int prio)
|
|||
unsigned long flags;
|
||||
int oldprio, on_rq, running;
|
||||
struct rq *rq;
|
||||
const struct sched_class *prev_class = p->sched_class;
|
||||
const struct sched_class *prev_class;
|
||||
|
||||
BUG_ON(prio < 0 || prio > MAX_PRIO);
|
||||
|
||||
|
|
@ -6017,6 +6017,7 @@ void rt_mutex_setprio(struct task_struct *p, int prio)
|
|||
update_rq_clock(rq);
|
||||
|
||||
oldprio = p->prio;
|
||||
prev_class = p->sched_class;
|
||||
on_rq = p->se.on_rq;
|
||||
running = task_current(rq, p);
|
||||
if (on_rq)
|
||||
|
|
@ -6244,7 +6245,7 @@ static int __sched_setscheduler(struct task_struct *p, int policy,
|
|||
{
|
||||
int retval, oldprio, oldpolicy = -1, on_rq, running;
|
||||
unsigned long flags;
|
||||
const struct sched_class *prev_class = p->sched_class;
|
||||
const struct sched_class *prev_class;
|
||||
struct rq *rq;
|
||||
int reset_on_fork;
|
||||
|
||||
|
|
@ -6358,6 +6359,7 @@ static int __sched_setscheduler(struct task_struct *p, int policy,
|
|||
p->sched_reset_on_fork = reset_on_fork;
|
||||
|
||||
oldprio = p->prio;
|
||||
prev_class = p->sched_class;
|
||||
__setscheduler(rq, p, policy, param->sched_priority);
|
||||
|
||||
if (running)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user