Commit d4fefa48 authored by Richard Guy Briggs's avatar Richard Guy Briggs Committed by Paul Moore
Browse files

audit: move audit_return_fixup before the filters

The success and return_code are needed by the filters.  Move
audit_return_fixup() before the filters.  This was causing syscall
auditing events to be missed.

Link: https://github.com/linux-audit/audit-kernel/issues/138


Cc: stable@vger.kernel.org
Fixes: 12c5e81d ("audit: prepare audit_context for use in calling contexts beyond syscalls")
Signed-off-by: default avatarRichard Guy Briggs <rgb@redhat.com>
[PM: manual merge required]
Signed-off-by: default avatarPaul Moore <paul@paul-moore.com>
parent ad982c3b
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -1940,6 +1940,7 @@ void __audit_uring_exit(int success, long code)
		goto out;
		goto out;
	}
	}


	audit_return_fixup(ctx, success, code);
	if (ctx->context == AUDIT_CTX_SYSCALL) {
	if (ctx->context == AUDIT_CTX_SYSCALL) {
		/*
		/*
		 * NOTE: See the note in __audit_uring_entry() about the case
		 * NOTE: See the note in __audit_uring_entry() about the case
@@ -1981,7 +1982,6 @@ void __audit_uring_exit(int success, long code)
	audit_filter_inodes(current, ctx);
	audit_filter_inodes(current, ctx);
	if (ctx->current_state != AUDIT_STATE_RECORD)
	if (ctx->current_state != AUDIT_STATE_RECORD)
		goto out;
		goto out;
	audit_return_fixup(ctx, success, code);
	audit_log_exit();
	audit_log_exit();


out:
out:
@@ -2065,13 +2065,13 @@ void __audit_syscall_exit(int success, long return_code)
	if (!list_empty(&context->killed_trees))
	if (!list_empty(&context->killed_trees))
		audit_kill_trees(context);
		audit_kill_trees(context);


	audit_return_fixup(context, success, return_code);
	/* run through both filters to ensure we set the filterkey properly */
	/* run through both filters to ensure we set the filterkey properly */
	audit_filter_syscall(current, context);
	audit_filter_syscall(current, context);
	audit_filter_inodes(current, context);
	audit_filter_inodes(current, context);
	if (context->current_state < AUDIT_STATE_RECORD)
	if (context->current_state < AUDIT_STATE_RECORD)
		goto out;
		goto out;


	audit_return_fixup(context, success, return_code);
	audit_log_exit();
	audit_log_exit();


out:
out: