Fixes an exit()/posix_cpu_clock_get() race spotted by Oleg Nesterov. Solution is to move the p->signal check under the tasklist_lock.
Signed-off-by: Paul E. McKenney <[EMAIL PROTECTED]> --- posix-cpu-timers.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff -urpNa -X dontdiff linux-2.6.20-rc6-clockrcu/kernel/posix-cpu-timers.c linux-2.6.20-rc6-clockrcu-fixes/kernel/posix-cpu-timers.c --- linux-2.6.20-rc6-clockrcu/kernel/posix-cpu-timers.c 2007-02-01 13:03:57.000000000 -0800 +++ linux-2.6.20-rc6-clockrcu-fixes/kernel/posix-cpu-timers.c 2007-02-03 16:53:41.000000000 -0800 @@ -312,10 +312,13 @@ int posix_cpu_clock_get(const clockid_t error = cpu_clock_sample(which_clock, p, &rtn); } - } else if (p->tgid == pid && p->signal) { + } else { read_lock(&tasklist_lock); - error = cpu_clock_sample_group(which_clock, - p, &rtn); + if (p->tgid == pid && p->signal) { + error = + cpu_clock_sample_group(which_clock, + p, &rtn); + } read_unlock(&tasklist_lock); } } - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/