diff options
| author | Oleg Nesterov <[email protected]> | 2006-10-28 10:38:50 -0700 |
|---|---|---|
| committer | Linus Torvalds <[email protected]> | 2006-10-28 11:30:54 -0700 |
| commit | 05d5bcd60e8202e5c7b28cf61186043a4d612623 (patch) | |
| tree | 7dccbeeb9d0b41103d70f89aae5eb6850f2f788c /include/linux/debugobjects.h | |
| parent | fca178c0c6e8d52a1875be36b070f30884ebfae9 (diff) | |
[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 <[email protected]>
Cc: Shailabh Nagar <[email protected]>
Cc: Balbir Singh <[email protected]>
Acked-by: Jay Lan <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
Diffstat (limited to 'include/linux/debugobjects.h')
0 files changed, 0 insertions, 0 deletions