diff options
Diffstat (limited to 'kernel/audit.c')
-rw-r--r-- | kernel/audit.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/kernel/audit.c b/kernel/audit.c index 486c968214d9..da8dc0db5bd3 100644 --- a/kernel/audit.c +++ b/kernel/audit.c | |||
@@ -2261,6 +2261,33 @@ out: | |||
2261 | } | 2261 | } |
2262 | 2262 | ||
2263 | /** | 2263 | /** |
2264 | * audit_signal_info - record signal info for shutting down audit subsystem | ||
2265 | * @sig: signal value | ||
2266 | * @t: task being signaled | ||
2267 | * | ||
2268 | * If the audit subsystem is being terminated, record the task (pid) | ||
2269 | * and uid that is doing that. | ||
2270 | */ | ||
2271 | int audit_signal_info(int sig, struct task_struct *t) | ||
2272 | { | ||
2273 | kuid_t uid = current_uid(), auid; | ||
2274 | |||
2275 | if (auditd_test_task(t) && | ||
2276 | (sig == SIGTERM || sig == SIGHUP || | ||
2277 | sig == SIGUSR1 || sig == SIGUSR2)) { | ||
2278 | audit_sig_pid = task_tgid_nr(current); | ||
2279 | auid = audit_get_loginuid(current); | ||
2280 | if (uid_valid(auid)) | ||
2281 | audit_sig_uid = auid; | ||
2282 | else | ||
2283 | audit_sig_uid = uid; | ||
2284 | security_task_getsecid(current, &audit_sig_sid); | ||
2285 | } | ||
2286 | |||
2287 | return audit_signal_info_syscall(t); | ||
2288 | } | ||
2289 | |||
2290 | /** | ||
2264 | * audit_log_end - end one audit record | 2291 | * audit_log_end - end one audit record |
2265 | * @ab: the audit_buffer | 2292 | * @ab: the audit_buffer |
2266 | * | 2293 | * |