diff options
-rw-r--r-- | arch/i386/kernel/ptrace.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/arch/i386/kernel/ptrace.c b/arch/i386/kernel/ptrace.c index 0da59b42843c..5ee9e1d60653 100644 --- a/arch/i386/kernel/ptrace.c +++ b/arch/i386/kernel/ptrace.c | |||
@@ -683,8 +683,19 @@ void do_syscall_trace(struct pt_regs *regs, int entryexit) | |||
683 | /* do the secure computing check first */ | 683 | /* do the secure computing check first */ |
684 | secure_computing(regs->orig_eax); | 684 | secure_computing(regs->orig_eax); |
685 | 685 | ||
686 | if (unlikely(current->audit_context) && entryexit) | 686 | if (unlikely(current->audit_context)) { |
687 | audit_syscall_exit(current, AUDITSC_RESULT(regs->eax), regs->eax); | 687 | if (entryexit) |
688 | audit_syscall_exit(current, AUDITSC_RESULT(regs->eax), regs->eax); | ||
689 | |||
690 | /* Debug traps, when using PTRACE_SINGLESTEP, must be sent only | ||
691 | * on the syscall exit path. Normally, when TIF_SYSCALL_AUDIT is | ||
692 | * not used, entry.S will call us only on syscall exit, not | ||
693 | * entry ; so when TIF_SYSCALL_AUDIT is used we must avoid | ||
694 | * calling send_sigtrap() on syscall entry. | ||
695 | */ | ||
696 | else if (is_singlestep) | ||
697 | goto out; | ||
698 | } | ||
688 | 699 | ||
689 | if (!(current->ptrace & PT_PTRACED)) | 700 | if (!(current->ptrace & PT_PTRACED)) |
690 | goto out; | 701 | goto out; |