Commit fa84cb93 authored by Al Viro's avatar Al Viro

[PATCH] move call of audit_free() into do_exit()

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent d6fe3945
...@@ -698,19 +698,12 @@ static void audit_log_exit(struct audit_context *context, struct task_struct *ts ...@@ -698,19 +698,12 @@ static void audit_log_exit(struct audit_context *context, struct task_struct *ts
* audit_free - free a per-task audit context * audit_free - free a per-task audit context
* @tsk: task whose audit context block to free * @tsk: task whose audit context block to free
* *
* Called from copy_process and __put_task_struct. * Called from copy_process and do_exit
*/ */
void audit_free(struct task_struct *tsk) void audit_free(struct task_struct *tsk)
{ {
struct audit_context *context; struct audit_context *context;
/*
* No need to lock the task - when we execute audit_free()
* then the task has no external references anymore, and
* we are tearing it down. (The locking also confuses
* DEBUG_LOCKDEP - this freeing may occur in softirq
* contexts as well, via RCU.)
*/
context = audit_get_context(tsk, 0, 0); context = audit_get_context(tsk, 0, 0);
if (likely(!context)) if (likely(!context))
return; return;
......
...@@ -35,6 +35,7 @@ ...@@ -35,6 +35,7 @@
#include <linux/futex.h> #include <linux/futex.h>
#include <linux/compat.h> #include <linux/compat.h>
#include <linux/pipe_fs_i.h> #include <linux/pipe_fs_i.h>
#include <linux/audit.h> /* for audit_free() */
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <asm/unistd.h> #include <asm/unistd.h>
...@@ -910,6 +911,8 @@ fastcall NORET_TYPE void do_exit(long code) ...@@ -910,6 +911,8 @@ fastcall NORET_TYPE void do_exit(long code)
if (unlikely(tsk->compat_robust_list)) if (unlikely(tsk->compat_robust_list))
compat_exit_robust_list(tsk); compat_exit_robust_list(tsk);
#endif #endif
if (unlikely(tsk->audit_context))
audit_free(tsk);
exit_mm(tsk); exit_mm(tsk);
exit_sem(tsk); exit_sem(tsk);
......
...@@ -114,8 +114,6 @@ void __put_task_struct(struct task_struct *tsk) ...@@ -114,8 +114,6 @@ void __put_task_struct(struct task_struct *tsk)
WARN_ON(atomic_read(&tsk->usage)); WARN_ON(atomic_read(&tsk->usage));
WARN_ON(tsk == current); WARN_ON(tsk == current);
if (unlikely(tsk->audit_context))
audit_free(tsk);
security_task_free(tsk); security_task_free(tsk);
free_uid(tsk->user); free_uid(tsk->user);
put_group_info(tsk->group_info); put_group_info(tsk->group_info);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment