diff options
Diffstat (limited to 'include/linux/tracehook.h')
-rw-r--r-- | include/linux/tracehook.h | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/include/linux/tracehook.h b/include/linux/tracehook.h index 8446573cc682..36fb3bbed6b2 100644 --- a/include/linux/tracehook.h +++ b/include/linux/tracehook.h | |||
@@ -54,13 +54,15 @@ struct linux_binprm; | |||
54 | /* | 54 | /* |
55 | * ptrace report for syscall entry and exit looks identical. | 55 | * ptrace report for syscall entry and exit looks identical. |
56 | */ | 56 | */ |
57 | static inline int ptrace_report_syscall(struct pt_regs *regs) | 57 | static inline int ptrace_report_syscall(struct pt_regs *regs, |
58 | unsigned long message) | ||
58 | { | 59 | { |
59 | int ptrace = current->ptrace; | 60 | int ptrace = current->ptrace; |
60 | 61 | ||
61 | if (!(ptrace & PT_PTRACED)) | 62 | if (!(ptrace & PT_PTRACED)) |
62 | return 0; | 63 | return 0; |
63 | 64 | ||
65 | current->ptrace_message = message; | ||
64 | ptrace_notify(SIGTRAP | ((ptrace & PT_TRACESYSGOOD) ? 0x80 : 0)); | 66 | ptrace_notify(SIGTRAP | ((ptrace & PT_TRACESYSGOOD) ? 0x80 : 0)); |
65 | 67 | ||
66 | /* | 68 | /* |
@@ -73,6 +75,7 @@ static inline int ptrace_report_syscall(struct pt_regs *regs) | |||
73 | current->exit_code = 0; | 75 | current->exit_code = 0; |
74 | } | 76 | } |
75 | 77 | ||
78 | current->ptrace_message = 0; | ||
76 | return fatal_signal_pending(current); | 79 | return fatal_signal_pending(current); |
77 | } | 80 | } |
78 | 81 | ||
@@ -98,7 +101,7 @@ static inline int ptrace_report_syscall(struct pt_regs *regs) | |||
98 | static inline __must_check int tracehook_report_syscall_entry( | 101 | static inline __must_check int tracehook_report_syscall_entry( |
99 | struct pt_regs *regs) | 102 | struct pt_regs *regs) |
100 | { | 103 | { |
101 | return ptrace_report_syscall(regs); | 104 | return ptrace_report_syscall(regs, PTRACE_EVENTMSG_SYSCALL_ENTRY); |
102 | } | 105 | } |
103 | 106 | ||
104 | /** | 107 | /** |
@@ -123,7 +126,7 @@ static inline void tracehook_report_syscall_exit(struct pt_regs *regs, int step) | |||
123 | if (step) | 126 | if (step) |
124 | user_single_step_report(regs); | 127 | user_single_step_report(regs); |
125 | else | 128 | else |
126 | ptrace_report_syscall(regs); | 129 | ptrace_report_syscall(regs, PTRACE_EVENTMSG_SYSCALL_EXIT); |
127 | } | 130 | } |
128 | 131 | ||
129 | /** | 132 | /** |