Oleg Nesterov 108150ea78 [PATCH] posix-timers: fix cleanup_timers() and run_posix_cpu_timers() races
1. cleanup_timers() sets timer->task = NULL under tasklist + ->sighand locks.
   That means that this code in posix_cpu_timer_del() and posix_cpu_timer_set()

   		lock_timer(timer);
		if (timer->task == NULL)
			return;
		read_lock(tasklist);
		put_task_struct(timer->task)

   is racy. With this patch timer->task modified and accounted only under
   timer->it_lock. Sadly, this means that dead task_struct won't be freed
   until timer deleted or armed.

2. run_posix_cpu_timers() collects expired timers into local list under
   tasklist + ->sighand again. That means that posix_cpu_timer_del()
   should check timer->it.cpu.firing under these locks too.

Signed-off-by: Oleg Nesterov <oleg@tv-sign.ru>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-10-24 08:12:35 -07:00
..
2005-09-10 10:06:26 -07:00
2005-10-08 15:00:57 -07:00
2005-04-16 15:20:36 -07:00
2005-06-25 16:24:29 -07:00
2005-04-16 15:20:36 -07:00
2005-04-16 15:20:36 -07:00
2005-04-16 15:20:36 -07:00
2005-09-07 16:57:33 -07:00
2005-07-27 16:25:51 -07:00
2005-06-28 14:53:40 -07:00
2005-10-08 15:00:57 -07:00
2005-09-10 10:06:21 -07:00
2005-04-16 15:20:36 -07:00
2005-09-21 10:11:54 -07:00
2005-07-07 18:23:46 -07:00
2005-09-07 16:57:45 -07:00
2005-09-13 09:59:04 -07:00
2005-04-16 15:20:36 -07:00
2005-09-07 16:57:17 -07:00
2005-09-10 10:06:21 -07:00
2005-08-01 10:03:56 -07:00
2005-08-29 16:01:32 -07:00
2005-04-16 15:20:36 -07:00
2005-07-12 20:38:38 -07:00
2005-04-16 15:20:36 -07:00
2005-09-07 16:57:45 -07:00