|
@@ -20,11 +20,11 @@
|
|
#include <linux/mm.h>
|
|
#include <linux/mm.h>
|
|
#include <linux/errno.h>
|
|
#include <linux/errno.h>
|
|
#include <linux/ptrace.h>
|
|
#include <linux/ptrace.h>
|
|
-#include <linux/audit.h>
|
|
|
|
#include <linux/smp.h>
|
|
#include <linux/smp.h>
|
|
#include <linux/user.h>
|
|
#include <linux/user.h>
|
|
#include <linux/security.h>
|
|
#include <linux/security.h>
|
|
-#include <linux/signal.h>
|
|
|
|
|
|
+#include <linux/audit.h>
|
|
|
|
+#include <linux/seccomp.h>
|
|
|
|
|
|
#include <asm/byteorder.h>
|
|
#include <asm/byteorder.h>
|
|
#include <asm/cpu.h>
|
|
#include <asm/cpu.h>
|
|
@@ -470,12 +470,17 @@ static inline int audit_arch(void)
|
|
*/
|
|
*/
|
|
asmlinkage void do_syscall_trace(struct pt_regs *regs, int entryexit)
|
|
asmlinkage void do_syscall_trace(struct pt_regs *regs, int entryexit)
|
|
{
|
|
{
|
|
|
|
+ /* do the secure computing check first */
|
|
|
|
+ if (!entryexit)
|
|
|
|
+ secure_computing(regs->regs[0]);
|
|
|
|
+
|
|
if (unlikely(current->audit_context) && entryexit)
|
|
if (unlikely(current->audit_context) && entryexit)
|
|
audit_syscall_exit(AUDITSC_RESULT(regs->regs[2]),
|
|
audit_syscall_exit(AUDITSC_RESULT(regs->regs[2]),
|
|
regs->regs[2]);
|
|
regs->regs[2]);
|
|
|
|
|
|
if (!(current->ptrace & PT_PTRACED))
|
|
if (!(current->ptrace & PT_PTRACED))
|
|
goto out;
|
|
goto out;
|
|
|
|
+
|
|
if (!test_thread_flag(TIF_SYSCALL_TRACE))
|
|
if (!test_thread_flag(TIF_SYSCALL_TRACE))
|
|
goto out;
|
|
goto out;
|
|
|
|
|
|
@@ -493,9 +498,10 @@ asmlinkage void do_syscall_trace(struct pt_regs *regs, int entryexit)
|
|
send_sig(current->exit_code, current, 1);
|
|
send_sig(current->exit_code, current, 1);
|
|
current->exit_code = 0;
|
|
current->exit_code = 0;
|
|
}
|
|
}
|
|
- out:
|
|
|
|
|
|
+
|
|
|
|
+out:
|
|
if (unlikely(current->audit_context) && !entryexit)
|
|
if (unlikely(current->audit_context) && !entryexit)
|
|
- audit_syscall_entry(audit_arch(), regs->regs[2],
|
|
|
|
|
|
+ audit_syscall_entry(audit_arch(), regs->regs[0],
|
|
regs->regs[4], regs->regs[5],
|
|
regs->regs[4], regs->regs[5],
|
|
regs->regs[6], regs->regs[7]);
|
|
regs->regs[6], regs->regs[7]);
|
|
}
|
|
}
|