Messages in this thread Patch in this message | | | Date | Sat, 19 Aug 2006 23:30:27 +0400 | From | Oleg Nesterov <> | Subject | [PATCH 1/4] for 2.6.18, revert "Drop tasklist lock in do_sched_setscheduler" |
| |
sched_setscheduler() looks at ->signal->rlim[]. It is unsafe do dereference ->signal unless tasklist_lock or ->siglock is held (or p == current). We pin the task structure, but this can't prevent from release_task()->__exit_signal() which sets ->signal = NULL.
Restore tasklist_lock across the setscheduler call.
Signed-off-by: Oleg Nesterov <oleg@tv-sign.ru>
--- 2.6.18-rc4/kernel/sched.c~1_revert 2006-08-19 17:50:56.000000000 +0400 +++ 2.6.18-rc4/kernel/sched.c 2006-08-19 18:15:15.000000000 +0400 @@ -4162,10 +4162,8 @@ do_sched_setscheduler(pid_t pid, int pol read_unlock_irq(&tasklist_lock); return -ESRCH; } - get_task_struct(p); - read_unlock_irq(&tasklist_lock); retval = sched_setscheduler(p, policy, &lparam); - put_task_struct(p); + read_unlock_irq(&tasklist_lock); return retval; } - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |