diff options
Diffstat (limited to 'kernel/auditsc.c')
| -rw-r--r-- | kernel/auditsc.c | 20 | 
1 files changed, 15 insertions, 5 deletions
| diff --git a/kernel/auditsc.c b/kernel/auditsc.c index e37e6a12c5e3..a371f857a0a9 100644 --- a/kernel/auditsc.c +++ b/kernel/auditsc.c @@ -1464,14 +1464,14 @@ static void show_special(struct audit_context *context, int *call_panic)  			audit_log_end(ab);  			ab = audit_log_start(context, GFP_KERNEL,  					     AUDIT_IPC_SET_PERM); +			if (unlikely(!ab)) +				return;  			audit_log_format(ab,  				"qbytes=%lx ouid=%u ogid=%u mode=%#ho",  				context->ipc.qbytes,  				context->ipc.perm_uid,  				context->ipc.perm_gid,  				context->ipc.perm_mode); -			if (!ab) -				return;  		}  		break; }  	case AUDIT_MQ_OPEN: { @@ -2675,7 +2675,7 @@ void __audit_mmap_fd(int fd, int flags)  	context->type = AUDIT_MMAP;  } -static void audit_log_abend(struct audit_buffer *ab, char *reason, long signr) +static void audit_log_task(struct audit_buffer *ab)  {  	kuid_t auid, uid;  	kgid_t gid; @@ -2693,6 +2693,11 @@ static void audit_log_abend(struct audit_buffer *ab, char *reason, long signr)  	audit_log_task_context(ab);  	audit_log_format(ab, " pid=%d comm=", current->pid);  	audit_log_untrustedstring(ab, current->comm); +} + +static void audit_log_abend(struct audit_buffer *ab, char *reason, long signr) +{ +	audit_log_task(ab);  	audit_log_format(ab, " reason=");  	audit_log_string(ab, reason);  	audit_log_format(ab, " sig=%ld", signr); @@ -2715,6 +2720,8 @@ void audit_core_dumps(long signr)  		return;  	ab = audit_log_start(NULL, GFP_KERNEL, AUDIT_ANOM_ABEND); +	if (unlikely(!ab)) +		return;  	audit_log_abend(ab, "memory violation", signr);  	audit_log_end(ab);  } @@ -2723,8 +2730,11 @@ void __audit_seccomp(unsigned long syscall, long signr, int code)  {  	struct audit_buffer *ab; -	ab = audit_log_start(NULL, GFP_KERNEL, AUDIT_ANOM_ABEND); -	audit_log_abend(ab, "seccomp", signr); +	ab = audit_log_start(NULL, GFP_KERNEL, AUDIT_SECCOMP); +	if (unlikely(!ab)) +		return; +	audit_log_task(ab); +	audit_log_format(ab, " sig=%ld", signr);  	audit_log_format(ab, " syscall=%ld", syscall);  	audit_log_format(ab, " compat=%d", is_compat_task());  	audit_log_format(ab, " ip=0x%lx", KSTK_EIP(current)); |