Messages in this thread Patch in this message |  | | | Date | Tue, 08 Dec 2009 20:24:22 -0000 | | From | Thomas Gleixner <> | | Subject | [patch 2/2] sched: Protect sched_rr_get_param access to task->sched_class |
| |
sched_rr_get_param calls task->sched_class->get_rr_interval(task) without protection against a concurrent sched_setscheduler() call which modifies task->sched_class.
Serialize the access with task_rq_lock(task);
Signed-off-by: Thomas Gleixner <tglx@linutronix.de> --- kernel/sched.c | 4 ++++ 1 file changed, 4 insertions(+) Index: linux-2.6-tip/kernel/sched.c =================================================================== --- linux-2.6-tip.orig/kernel/sched.c +++ linux-2.6-tip/kernel/sched.c @@ -6887,6 +6887,8 @@ SYSCALL_DEFINE2(sched_rr_get_interval, p { struct task_struct *p; unsigned int time_slice; + unsigned long flags; + struct rq *rq; int retval; struct timespec t; @@ -6903,7 +6905,9 @@ SYSCALL_DEFINE2(sched_rr_get_interval, p if (retval) goto out_unlock; + rq = task_rq_lock(p, &flags); time_slice = p->sched_class->get_rr_interval(p); + task_rq_unlock(rq, &flags); read_unlock(&tasklist_lock); jiffies_to_timespec(time_slice, &t);
|  |