Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1563284

[PATCH] seccomp: dump core when using SECCOMP_RET_KILL

From Mike Frysinger <vapier@gentoo.org>
Newsgroups linux.kernel
Subject [PATCH] seccomp: dump core when using SECCOMP_RET_KILL
Date 2017-01-20 05:30 +0100
Message-ID <t1yZP-2u9-3@gated-at.bofh.it> (permalink)
Organization linux.* mail to news gateway

Show all headers | View raw


From: Mike Frysinger <vapier@chromium.org>

The SECCOMP_RET_KILL mode is documented as immediately killing the
process as if a SIGSYS had been sent and not caught (similar to a
SIGKILL).  However, a SIGSYS is documented as triggering a coredump
which does not happen today.

This has the advantage of being able to more easily debug a process
that fails a seccomp filter.  Today, most apps need to recompile and
change their filter in order to get detailed info out, or manually run
things through strace, or enable detailed kernel auditing.  Now we get
coredumps that fit into existing system-wide crash reporting setups.

From a security pov, this shouldn't be a problem.  Unhandled signals
can already be sent externally which trigger a coredump independent of
the status of the seccomp filter.  The act of dumping core itself does
not cause change in execution of the program.

URL: https://crbug.com/676357
Signed-off-by: Mike Frysinger <vapier@chromium.org>
Acked-by: Jorge Lucangeli Obes <jorgelo@chromium.org>
Acked-by: Kees Cook <keescook@chromium.org>
---
 kernel/seccomp.c | 29 +++++++++++++++++++++--------
 1 file changed, 21 insertions(+), 8 deletions(-)

diff --git a/kernel/seccomp.c b/kernel/seccomp.c
index f7ce79a46050..f8f88ebcb3ba 100644
--- a/kernel/seccomp.c
+++ b/kernel/seccomp.c
@@ -16,6 +16,7 @@
 #include <linux/atomic.h>
 #include <linux/audit.h>
 #include <linux/compat.h>
+#include <linux/coredump.h>
 #include <linux/sched.h>
 #include <linux/seccomp.h>
 #include <linux/slab.h>
@@ -486,6 +487,17 @@ void put_seccomp_filter(struct task_struct *tsk)
 	}
 }
 
+static void seccomp_init_siginfo(siginfo_t *info, int syscall, int reason)
+{
+	memset(info, 0, sizeof(*info));
+	info->si_signo = SIGSYS;
+	info->si_code = SYS_SECCOMP;
+	info->si_call_addr = (void __user *)KSTK_EIP(current);
+	info->si_errno = reason;
+	info->si_arch = syscall_get_arch();
+	info->si_syscall = syscall;
+}
+
 /**
  * seccomp_send_sigsys - signals the task to allow in-process syscall emulation
  * @syscall: syscall number to send to userland
@@ -496,13 +508,7 @@ void put_seccomp_filter(struct task_struct *tsk)
 static void seccomp_send_sigsys(int syscall, int reason)
 {
 	struct siginfo info;
-	memset(&info, 0, sizeof(info));
-	info.si_signo = SIGSYS;
-	info.si_code = SYS_SECCOMP;
-	info.si_call_addr = (void __user *)KSTK_EIP(current);
-	info.si_errno = reason;
-	info.si_arch = syscall_get_arch();
-	info.si_syscall = syscall;
+	seccomp_init_siginfo(&info, syscall, reason);
 	force_sig_info(SIGSYS, &info, current);
 }
 #endif	/* CONFIG_SECCOMP_FILTER */
@@ -634,10 +640,17 @@ static int __seccomp_filter(int this_syscall, const struct seccomp_data *sd,
 		return 0;
 
 	case SECCOMP_RET_KILL:
-	default:
+	default: {
+		siginfo_t info;
 		audit_seccomp(this_syscall, SIGSYS, action);
+		/* Show the original registers in the dump. */
+		syscall_rollback(current, task_pt_regs(current));
+		/* Trigger a manual coredump since do_exit skips it. */
+		seccomp_init_siginfo(&info, this_syscall, data);
+		do_coredump(&info);
 		do_exit(SIGSYS);
 	}
+	}
 
 	unreachable();
 
-- 
2.11.0

Back to linux.kernel | Previous | NextNext in thread | Find similar | Unroll thread


Thread

[PATCH] seccomp: dump core when using SECCOMP_RET_KILL Mike Frysinger <vapier@gentoo.org> - 2017-01-20 05:30 +0100
  Re: [PATCH] seccomp: dump core when using SECCOMP_RET_KILL Kees Cook <keescook@chromium.org> - 2017-01-20 21:40 +0100
    Re: [PATCH] seccomp: dump core when using SECCOMP_RET_KILL James Morris <jmorris@namei.org> - 2017-01-22 23:20 +0100
      Re: [PATCH] seccomp: dump core when using SECCOMP_RET_KILL Mike Frysinger <vapier@chromium.org> - 2017-01-23 08:40 +0100
        Re: [PATCH] seccomp: dump core when using SECCOMP_RET_KILL James Morris <jmorris@namei.org> - 2017-01-23 11:30 +0100
  Re: seccomp: dump core when using SECCOMP_RET_KILL Mike Frysinger <vapier@chromium.org> - 2017-01-25 02:50 +0100
  Re: seccomp: dump core when using SECCOMP_RET_KILL Kees Cook <keescook@chromium.org> - 2017-01-25 21:10 +0100
    Re: seccomp: dump core when using SECCOMP_RET_KILL Kees Cook <keescook@chromium.org> - 2017-01-27 22:50 +0100
      Re: seccomp: dump core when using SECCOMP_RET_KILL Paul Moore <paul@paul-moore.com> - 2017-01-28 15:50 +0100

csiph-web