diff options
| -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); |
