diff options
Diffstat (limited to 'kernel/auditsc.c')
-rw-r--r-- | kernel/auditsc.c | 46 |
1 files changed, 26 insertions, 20 deletions
diff --git a/kernel/auditsc.c b/kernel/auditsc.c index 90594c9f7552..7aef2f4b6c64 100644 --- a/kernel/auditsc.c +++ b/kernel/auditsc.c | |||
@@ -1719,7 +1719,7 @@ void audit_putname(struct filename *name) | |||
1719 | struct audit_context *context = current->audit_context; | 1719 | struct audit_context *context = current->audit_context; |
1720 | 1720 | ||
1721 | BUG_ON(!context); | 1721 | BUG_ON(!context); |
1722 | if (!context->in_syscall) { | 1722 | if (!name->aname || !context->in_syscall) { |
1723 | #if AUDIT_DEBUG == 2 | 1723 | #if AUDIT_DEBUG == 2 |
1724 | printk(KERN_ERR "%s:%d(:%d): final_putname(%p)\n", | 1724 | printk(KERN_ERR "%s:%d(:%d): final_putname(%p)\n", |
1725 | __FILE__, __LINE__, context->serial, name); | 1725 | __FILE__, __LINE__, context->serial, name); |
@@ -1969,18 +1969,24 @@ static void audit_log_set_loginuid(kuid_t koldloginuid, kuid_t kloginuid, | |||
1969 | int rc) | 1969 | int rc) |
1970 | { | 1970 | { |
1971 | struct audit_buffer *ab; | 1971 | struct audit_buffer *ab; |
1972 | uid_t uid, ologinuid, nloginuid; | 1972 | uid_t uid, oldloginuid, loginuid; |
1973 | |||
1974 | if (!audit_enabled) | ||
1975 | return; | ||
1973 | 1976 | ||
1974 | uid = from_kuid(&init_user_ns, task_uid(current)); | 1977 | uid = from_kuid(&init_user_ns, task_uid(current)); |
1975 | ologinuid = from_kuid(&init_user_ns, koldloginuid); | 1978 | oldloginuid = from_kuid(&init_user_ns, koldloginuid); |
1976 | nloginuid = from_kuid(&init_user_ns, kloginuid), | 1979 | loginuid = from_kuid(&init_user_ns, kloginuid), |
1977 | 1980 | ||
1978 | ab = audit_log_start(NULL, GFP_KERNEL, AUDIT_LOGIN); | 1981 | ab = audit_log_start(NULL, GFP_KERNEL, AUDIT_LOGIN); |
1979 | if (!ab) | 1982 | if (!ab) |
1980 | return; | 1983 | return; |
1981 | audit_log_format(ab, "pid=%d uid=%u old auid=%u new auid=%u old " | 1984 | audit_log_format(ab, "pid=%d uid=%u" |
1982 | "ses=%u new ses=%u res=%d", current->pid, uid, ologinuid, | 1985 | " old-auid=%u new-auid=%u old-ses=%u new-ses=%u" |
1983 | nloginuid, oldsessionid, sessionid, !rc); | 1986 | " res=%d", |
1987 | current->pid, uid, | ||
1988 | oldloginuid, loginuid, oldsessionid, sessionid, | ||
1989 | !rc); | ||
1984 | audit_log_end(ab); | 1990 | audit_log_end(ab); |
1985 | } | 1991 | } |
1986 | 1992 | ||
@@ -2008,7 +2014,7 @@ int audit_set_loginuid(kuid_t loginuid) | |||
2008 | 2014 | ||
2009 | /* are we setting or clearing? */ | 2015 | /* are we setting or clearing? */ |
2010 | if (uid_valid(loginuid)) | 2016 | if (uid_valid(loginuid)) |
2011 | sessionid = atomic_inc_return(&session_id); | 2017 | sessionid = (unsigned int)atomic_inc_return(&session_id); |
2012 | 2018 | ||
2013 | task->sessionid = sessionid; | 2019 | task->sessionid = sessionid; |
2014 | task->loginuid = loginuid; | 2020 | task->loginuid = loginuid; |
@@ -2321,18 +2327,16 @@ int __audit_log_bprm_fcaps(struct linux_binprm *bprm, | |||
2321 | 2327 | ||
2322 | /** | 2328 | /** |
2323 | * __audit_log_capset - store information about the arguments to the capset syscall | 2329 | * __audit_log_capset - store information about the arguments to the capset syscall |
2324 | * @pid: target pid of the capset call | ||
2325 | * @new: the new credentials | 2330 | * @new: the new credentials |
2326 | * @old: the old (current) credentials | 2331 | * @old: the old (current) credentials |
2327 | * | 2332 | * |
2328 | * Record the aguments userspace sent to sys_capset for later printing by the | 2333 | * Record the aguments userspace sent to sys_capset for later printing by the |
2329 | * audit system if applicable | 2334 | * audit system if applicable |
2330 | */ | 2335 | */ |
2331 | void __audit_log_capset(pid_t pid, | 2336 | void __audit_log_capset(const struct cred *new, const struct cred *old) |
2332 | const struct cred *new, const struct cred *old) | ||
2333 | { | 2337 | { |
2334 | struct audit_context *context = current->audit_context; | 2338 | struct audit_context *context = current->audit_context; |
2335 | context->capset.pid = pid; | 2339 | context->capset.pid = task_pid_nr(current); |
2336 | context->capset.cap.effective = new->cap_effective; | 2340 | context->capset.cap.effective = new->cap_effective; |
2337 | context->capset.cap.inheritable = new->cap_effective; | 2341 | context->capset.cap.inheritable = new->cap_effective; |
2338 | context->capset.cap.permitted = new->cap_permitted; | 2342 | context->capset.cap.permitted = new->cap_permitted; |
@@ -2352,6 +2356,7 @@ static void audit_log_task(struct audit_buffer *ab) | |||
2352 | kuid_t auid, uid; | 2356 | kuid_t auid, uid; |
2353 | kgid_t gid; | 2357 | kgid_t gid; |
2354 | unsigned int sessionid; | 2358 | unsigned int sessionid; |
2359 | struct mm_struct *mm = current->mm; | ||
2355 | 2360 | ||
2356 | auid = audit_get_loginuid(current); | 2361 | auid = audit_get_loginuid(current); |
2357 | sessionid = audit_get_sessionid(current); | 2362 | sessionid = audit_get_sessionid(current); |
@@ -2365,15 +2370,15 @@ static void audit_log_task(struct audit_buffer *ab) | |||
2365 | audit_log_task_context(ab); | 2370 | audit_log_task_context(ab); |
2366 | audit_log_format(ab, " pid=%d comm=", current->pid); | 2371 | audit_log_format(ab, " pid=%d comm=", current->pid); |
2367 | audit_log_untrustedstring(ab, current->comm); | 2372 | audit_log_untrustedstring(ab, current->comm); |
2373 | if (mm) { | ||
2374 | down_read(&mm->mmap_sem); | ||
2375 | if (mm->exe_file) | ||
2376 | audit_log_d_path(ab, " exe=", &mm->exe_file->f_path); | ||
2377 | up_read(&mm->mmap_sem); | ||
2378 | } else | ||
2379 | audit_log_format(ab, " exe=(null)"); | ||
2368 | } | 2380 | } |
2369 | 2381 | ||
2370 | static void audit_log_abend(struct audit_buffer *ab, char *reason, long signr) | ||
2371 | { | ||
2372 | audit_log_task(ab); | ||
2373 | audit_log_format(ab, " reason="); | ||
2374 | audit_log_string(ab, reason); | ||
2375 | audit_log_format(ab, " sig=%ld", signr); | ||
2376 | } | ||
2377 | /** | 2382 | /** |
2378 | * audit_core_dumps - record information about processes that end abnormally | 2383 | * audit_core_dumps - record information about processes that end abnormally |
2379 | * @signr: signal value | 2384 | * @signr: signal value |
@@ -2394,7 +2399,8 @@ void audit_core_dumps(long signr) | |||
2394 | ab = audit_log_start(NULL, GFP_KERNEL, AUDIT_ANOM_ABEND); | 2399 | ab = audit_log_start(NULL, GFP_KERNEL, AUDIT_ANOM_ABEND); |
2395 | if (unlikely(!ab)) | 2400 | if (unlikely(!ab)) |
2396 | return; | 2401 | return; |
2397 | audit_log_abend(ab, "memory violation", signr); | 2402 | audit_log_task(ab); |
2403 | audit_log_format(ab, " sig=%ld", signr); | ||
2398 | audit_log_end(ab); | 2404 | audit_log_end(ab); |
2399 | } | 2405 | } |
2400 | 2406 | ||