Oleg Nesterov 05d5bcd60e [PATCH] bacct_add_tsk: fix unsafe and wrong parent/group_leader dereference
1. ts = timespec_sub(uptime, current->group_leader->start_time);

   It is possible that current != tsk. Probably it was supposed
   to be 'tsk->group_leader->start_time. But why we are reading
   group_leader's start_time ? This accounting is per thread,
   not per procees, I changed this to 'tsk->start_time.
   Please corect me.

2. stats->ac_ppid = (tsk->parent) ? tsk->parent->pid : 0;

   tsk->parent never == NULL, and it is unsafe to dereference it.
   Both the task and it's parent may exit after the caller unlocks
   tasklist_lock, the memory could be unmapped (DEBUG_SLAB).
   (And we should use ->real_parent->tgid in fact).

Q: I don't understand the 'if (thread_group_leader(tsk))' check.
Why it is needed ?

Signed-off-by: Oleg Nesterov <oleg@tv-sign.ru>
Cc: Shailabh Nagar <nagar@watson.ibm.com>
Cc: Balbir Singh <balbir@in.ibm.com>
Acked-by: Jay Lan <jlan@sgi.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2006-10-28 11:30:54 -07:00
..
2006-10-17 08:18:44 -07:00
2006-10-06 08:53:39 -07:00
2006-09-11 13:32:30 -04:00
2006-10-04 08:31:21 -04:00
2006-09-29 09:18:12 -07:00
2006-10-10 15:37:23 -07:00
2006-10-03 08:03:41 -07:00
2006-10-10 15:37:22 -07:00
2006-03-26 08:57:03 -08:00
2006-09-29 09:18:15 -07:00
2006-10-02 07:57:23 -07:00
2006-07-03 15:27:04 -07:00
2006-09-30 01:47:55 +02:00
2006-09-29 09:18:12 -07:00
2006-10-16 09:14:05 -07:00
2006-10-20 10:26:38 -07:00
2006-10-01 00:39:27 -07:00
2006-04-19 16:27:18 -07:00
2006-07-10 13:24:25 -07:00