aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Paris <eparis@redhat.com>2008-01-07 13:34:51 -0500
committerAl Viro <viro@zeniv.linux.org.uk>2008-02-01 14:05:55 -0500
commitf701b75ed5ffb6820efe530d1a3abcc6fc4678ad (patch)
tree46036f5e1b2703f6f9073a4a1469e3c5a611083e
parentbfef93a5d1fb5654fe2025276c55e202d10b5255 (diff)
[AUDIT] return EINTR not ERESTART*
The syscall exit code will change ERESTART* kernel internal return codes to EINTR if it does not restart the syscall. Since we collect the audit info before that point we should fix those in the audit log as well. Signed-off-by: Eric Paris <eparis@redhat.com>
-rw-r--r--kernel/auditsc.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/kernel/auditsc.c b/kernel/auditsc.c
index c95173a194bf..ce8c957201ef 100644
--- a/kernel/auditsc.c
+++ b/kernel/auditsc.c
@@ -701,7 +701,24 @@ static inline struct audit_context *audit_get_context(struct task_struct *tsk,
701 if (likely(!context)) 701 if (likely(!context))
702 return NULL; 702 return NULL;
703 context->return_valid = return_valid; 703 context->return_valid = return_valid;
704 context->return_code = return_code; 704
705 /*
706 * we need to fix up the return code in the audit logs if the actual
707 * return codes are later going to be fixed up by the arch specific
708 * signal handlers
709 *
710 * This is actually a test for:
711 * (rc == ERESTARTSYS ) || (rc == ERESTARTNOINTR) ||
712 * (rc == ERESTARTNOHAND) || (rc == ERESTART_RESTARTBLOCK)
713 *
714 * but is faster than a bunch of ||
715 */
716 if (unlikely(return_code <= -ERESTARTSYS) &&
717 (return_code >= -ERESTART_RESTARTBLOCK) &&
718 (return_code != -ENOIOCTLCMD))
719 context->return_code = -EINTR;
720 else
721 context->return_code = return_code;
705 722
706 if (context->in_syscall && !context->dummy && !context->auditable) { 723 if (context->in_syscall && !context->dummy && !context->auditable) {
707 enum audit_state state; 724 enum audit_state state;