diff options
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/auditsc.c | 9 | ||||
-rw-r--r-- | kernel/exit.c | 3 | ||||
-rw-r--r-- | kernel/fork.c | 2 |
3 files changed, 4 insertions, 10 deletions
diff --git a/kernel/auditsc.c b/kernel/auditsc.c index 4052f0aec1d3..8ec52ffad633 100644 --- a/kernel/auditsc.c +++ b/kernel/auditsc.c | |||
@@ -698,19 +698,12 @@ static void audit_log_exit(struct audit_context *context, struct task_struct *ts | |||
698 | * audit_free - free a per-task audit context | 698 | * audit_free - free a per-task audit context |
699 | * @tsk: task whose audit context block to free | 699 | * @tsk: task whose audit context block to free |
700 | * | 700 | * |
701 | * Called from copy_process and __put_task_struct. | 701 | * Called from copy_process and do_exit |
702 | */ | 702 | */ |
703 | void audit_free(struct task_struct *tsk) | 703 | void audit_free(struct task_struct *tsk) |
704 | { | 704 | { |
705 | struct audit_context *context; | 705 | struct audit_context *context; |
706 | 706 | ||
707 | /* | ||
708 | * No need to lock the task - when we execute audit_free() | ||
709 | * then the task has no external references anymore, and | ||
710 | * we are tearing it down. (The locking also confuses | ||
711 | * DEBUG_LOCKDEP - this freeing may occur in softirq | ||
712 | * contexts as well, via RCU.) | ||
713 | */ | ||
714 | context = audit_get_context(tsk, 0, 0); | 707 | context = audit_get_context(tsk, 0, 0); |
715 | if (likely(!context)) | 708 | if (likely(!context)) |
716 | return; | 709 | return; |
diff --git a/kernel/exit.c b/kernel/exit.c index f86434d7b3d1..e95b93282210 100644 --- a/kernel/exit.c +++ b/kernel/exit.c | |||
@@ -35,6 +35,7 @@ | |||
35 | #include <linux/futex.h> | 35 | #include <linux/futex.h> |
36 | #include <linux/compat.h> | 36 | #include <linux/compat.h> |
37 | #include <linux/pipe_fs_i.h> | 37 | #include <linux/pipe_fs_i.h> |
38 | #include <linux/audit.h> /* for audit_free() */ | ||
38 | 39 | ||
39 | #include <asm/uaccess.h> | 40 | #include <asm/uaccess.h> |
40 | #include <asm/unistd.h> | 41 | #include <asm/unistd.h> |
@@ -910,6 +911,8 @@ fastcall NORET_TYPE void do_exit(long code) | |||
910 | if (unlikely(tsk->compat_robust_list)) | 911 | if (unlikely(tsk->compat_robust_list)) |
911 | compat_exit_robust_list(tsk); | 912 | compat_exit_robust_list(tsk); |
912 | #endif | 913 | #endif |
914 | if (unlikely(tsk->audit_context)) | ||
915 | audit_free(tsk); | ||
913 | exit_mm(tsk); | 916 | exit_mm(tsk); |
914 | 917 | ||
915 | exit_sem(tsk); | 918 | exit_sem(tsk); |
diff --git a/kernel/fork.c b/kernel/fork.c index d2fa57d480d4..ac8100e3088a 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
@@ -114,8 +114,6 @@ void __put_task_struct(struct task_struct *tsk) | |||
114 | WARN_ON(atomic_read(&tsk->usage)); | 114 | WARN_ON(atomic_read(&tsk->usage)); |
115 | WARN_ON(tsk == current); | 115 | WARN_ON(tsk == current); |
116 | 116 | ||
117 | if (unlikely(tsk->audit_context)) | ||
118 | audit_free(tsk); | ||
119 | security_task_free(tsk); | 117 | security_task_free(tsk); |
120 | free_uid(tsk->user); | 118 | free_uid(tsk->user); |
121 | put_group_info(tsk->group_info); | 119 | put_group_info(tsk->group_info); |