diff options
| -rw-r--r-- | kernel/auditsc.c | 19 |
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; |
