The patch titled Subject: ptrace: the killed tracee should not enter the syscall has been added to the -mm tree. Its filename is ptrace-the-killed-tracee-should-not-enter-the-syscall.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/SubmitChecklist when testing your code *** The -mm tree is included into linux-next and is updated there every 3-4 working days ------------------------------------------------------ From: Oleg Nesterov <oleg@xxxxxxxxxx> Subject: ptrace: the killed tracee should not enter the syscall Another old/known problem. If the tracee is killed after it reports syscall_entry, it starts the syscall and debugger can't control this. This confuses the users and this creates the security problems for ptrace jailers. Change tracehook_report_syscall_entry() to return non-zero if killed, this instructs syscall_trace_enter() to abort the syscall. Reported-by: Chris Evans <scarybeasts@xxxxxxxxx> Tested-by: Indan Zupancic <indan@xxxxxx> Signed-off-by: Oleg Nesterov <oleg@xxxxxxxxxx> Cc: Denys Vlasenko <vda.linux@xxxxxxxxxxxxxx> Cc: Tejun Heo <tj@xxxxxxxxxx> Cc: Pedro Alves <palves@xxxxxxxxxx> Cc: Jan Kratochvil <jan.kratochvil@xxxxxxxxxx> Cc: Steven Rostedt <rostedt@xxxxxxxxxxx> Cc: Frederic Weisbecker <fweisbec@xxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- include/linux/tracehook.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff -puN include/linux/tracehook.h~ptrace-the-killed-tracee-should-not-enter-the-syscall include/linux/tracehook.h --- a/include/linux/tracehook.h~ptrace-the-killed-tracee-should-not-enter-the-syscall +++ a/include/linux/tracehook.h @@ -54,12 +54,12 @@ struct linux_binprm; /* * ptrace report for syscall entry and exit looks identical. */ -static inline void ptrace_report_syscall(struct pt_regs *regs) +static inline int ptrace_report_syscall(struct pt_regs *regs) { int ptrace = current->ptrace; if (!(ptrace & PT_PTRACED)) - return; + return 0; ptrace_notify(SIGTRAP | ((ptrace & PT_TRACESYSGOOD) ? 0x80 : 0)); @@ -72,6 +72,8 @@ static inline void ptrace_report_syscall send_sig(current->exit_code, current, 1); current->exit_code = 0; } + + return fatal_signal_pending(current); } /** @@ -96,8 +98,7 @@ static inline void ptrace_report_syscall static inline __must_check int tracehook_report_syscall_entry( struct pt_regs *regs) { - ptrace_report_syscall(regs); - return 0; + return ptrace_report_syscall(regs); } /** _ Subject: Subject: ptrace: the killed tracee should not enter the syscall Patches currently in -mm which might be from oleg@xxxxxxxxxx are linux-next.patch arm-use-set_current_blocked-and-block_sigmask.patch avr32-dont-mask-signals-in-the-error-path.patch avr32-use-set_current_blocked-in-handle_signal-sys_rt_sigreturn.patch avr32-use-block_sigmask.patch powerpc-use-set_current_blocked-and-block_sigmask.patch hexagon-use-set_current_blocked-and-block_sigmask.patch tile-use-set_current_blocked-and-block_sigmask.patch ia64-use-set_current_blocked-and-block_sigmask.patch microblaze-dont-reimplement-force_sigsegv.patch microblaze-no-need-to-reset-handler-if-sa_oneshot.patch microblaze-fix-signal-masking.patch microblaze-use-set_current_blocked-and-block_sigmask.patch mips-use-set_current_blocked-and-block_sigmask.patch score-dont-mask-signals-if-we-fail-to-setup-signal-stack.patch score-use-set_current_blocked-and-block_sigmask.patch unicore32-use-block_sigmask.patch blackfin-use-set_current_blocked-and-block_sigmask.patch openrisc-dont-reimplement-force_sigsegv.patch openrisc-no-need-to-reset-handler-if-sa_oneshot.patch openrisc-dont-mask-signals-if-we-fail-to-setup-signal-stack.patch openrisc-use-set_current_blocked-and-block_sigmask.patch parisc-use-set_current_blocked-and-block_sigmask.patch s390-use-block_sigmask.patch xtensa-dont-reimplement-force_sigsegv.patch xtensa-no-need-to-reset-handler-if-sa_oneshot.patch xtensa-dont-mask-signals-if-we-fail-to-setup-signal-stack.patch xtensa-use-set_current_blocked-and-block_sigmask.patch sparc-use-block_sigmask.patch frv-use-set_current_blocked-and-block_sigmask.patch sh-no-need-to-reset-handler-if-sa_oneshot.patch sh-use-set_current_blocked-and-block_sigmask.patch h8300-use-set_current_blocked-and-block_sigmask.patch alpha-use-set_current_blocked-and-block_sigmask.patch m32r-use-set_current_blocked-and-block_sigmask.patch m68k-use-set_current_blocked-and-block_sigmask.patch mn10300-use-set_current_blocked-and-block_sigmask.patch c6x-use-set_current_blocked-and-block_sigmask.patch cris-use-set_current_blocked-and-block_sigmask.patch um-dont-restore-current-blocked-on-error.patch um-use-set_current_blocked-and-block_sigmask.patch prctl-add-pr_setget_child_subreaper-to-allow-simple-process-supervision.patch prctl-add-pr_setget_child_subreaper-to-allow-simple-process-supervision-fix.patch prctl-add-pr_setget_child_subreaper-to-allow-simple-process-supervision-fix-fix.patch kernel-exitc-if-init-dies-log-a-signal-which-killed-it-if-any.patch kernel-exitc-if-init-dies-log-a-signal-which-killed-it-if-any-fix.patch ptrace-the-killed-tracee-should-not-enter-the-syscall.patch ptrace-dont-send-sigtrap-on-exec-if-seized.patch signal-give-send_sig_forced-more-power-to-beat-signal_unkillable.patch signal-cosmetic-s-from_ancestor_ns-force-in-prepare_signal-paths.patch signal-oom_kill_task-use-send_sig_forced-instead-of-force_sig.patch signal-zap_pid_ns_processes-s-send_sig_noinfo-send_sig_forced.patch usermodehelper-use-umh_wait_proc-consistently.patch usermodehelper-introduce-umh_completesub_info.patch usermodehelper-implement-umh_killable.patch usermodehelper-kill-umh_wait-renumber-umh_-constants.patch usermodehelper-____call_usermodehelper-doesnt-need-do_exit.patch kmod-introduce-call_modprobe-helper.patch kmod-make-__request_module-killable.patch pidns-add-reboot_pid_ns-to-handle-the-reboot-syscall.patch pidns-add-reboot_pid_ns-to-handle-the-reboot-syscall-fix.patch sysctl-make-kernelns_last_pid-control-being-checkpoint_restore-dependent.patch fs-proc-introduce-proc-pid-task-tid-children-entry-v9.patch syscalls-x86-add-__nr_kcmp-syscall-v8-fix-fix-fix-fix.patch -- To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html