diff options
author | KaiGai Kohei <kaigai@ak.jp.nec.com> | 2006-06-25 08:49:25 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-06-25 13:01:25 -0400 |
commit | f6ec29a42d7ac3b309a9cef179b686d23986ab98 (patch) | |
tree | 5150d4f403833ac18b468bd0e0e0a9a7cdd9f4be /kernel/exit.c | |
parent | 0e4648141af02331f21aabcd34940c70f09a2d04 (diff) |
[PATCH] pacct: avoidance to refer the last thread as a representation of the process
When pacct facility generate an 'ac_flag' field in accounting record, it
refers a task_struct of the thread which died last in the process. But any
other task_structs are ignored.
Therefore, pacct facility drops ASU flag even if root-privilege operations are
used by any other threads except the last one. In addition, AFORK flag is
always set when the thread of group-leader didn't die last, although this
process has called execve() after fork().
We have a same matter in ac_exitcode. The recorded ac_exitcode is an exit
code of the last thread in the process. There is a possibility this exitcode
is not the group leader's one.
Diffstat (limited to 'kernel/exit.c')
-rw-r--r-- | kernel/exit.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/kernel/exit.c b/kernel/exit.c index 819d82c2efba..e76bd02e930e 100644 --- a/kernel/exit.c +++ b/kernel/exit.c | |||
@@ -894,8 +894,8 @@ fastcall NORET_TYPE void do_exit(long code) | |||
894 | if (group_dead) { | 894 | if (group_dead) { |
895 | hrtimer_cancel(&tsk->signal->real_timer); | 895 | hrtimer_cancel(&tsk->signal->real_timer); |
896 | exit_itimers(tsk->signal); | 896 | exit_itimers(tsk->signal); |
897 | acct_collect(); | ||
898 | } | 897 | } |
898 | acct_collect(code, group_dead); | ||
899 | if (unlikely(tsk->robust_list)) | 899 | if (unlikely(tsk->robust_list)) |
900 | exit_robust_list(tsk); | 900 | exit_robust_list(tsk); |
901 | #if defined(CONFIG_FUTEX) && defined(CONFIG_COMPAT) | 901 | #if defined(CONFIG_FUTEX) && defined(CONFIG_COMPAT) |
@@ -907,7 +907,7 @@ fastcall NORET_TYPE void do_exit(long code) | |||
907 | exit_mm(tsk); | 907 | exit_mm(tsk); |
908 | 908 | ||
909 | if (group_dead) | 909 | if (group_dead) |
910 | acct_process(code); | 910 | acct_process(); |
911 | exit_sem(tsk); | 911 | exit_sem(tsk); |
912 | __exit_files(tsk); | 912 | __exit_files(tsk); |
913 | __exit_fs(tsk); | 913 | __exit_fs(tsk); |