Commit | Line | Data |
---|---|---|
a0b1f42c JD |
1 | #!/bin/bash |
2 | # | |
9d16b343 | 3 | # Copyright (C) 2016 Julien Desfossez <jdesfossez@efficios.com> |
a0b1f42c | 4 | # |
9d16b343 | 5 | # SPDX-License-Identifier: GPL-2.0-only |
a0b1f42c | 6 | # |
a0b1f42c JD |
7 | |
8 | TEST_DESC="Kernel tracer - select, poll and epoll payload extraction" | |
9 | ||
d40c2620 | 10 | CURDIR=$(dirname "$0")/ |
a0b1f42c JD |
11 | TESTDIR=$CURDIR/../.. |
12 | VALIDATE_SCRIPT="$CURDIR/validate_select_poll_epoll.py" | |
a0b1f42c | 13 | |
a0b1f42c JD |
14 | DISABLE_VALIDATE=0 |
15 | # Babeltrace python bindings are required for the validation, but | |
16 | # it is not a mandatory dependancy of the project, so fail run the | |
17 | # without the content validation, at least we test that we are not | |
18 | # crashing the kernel. | |
19 | $VALIDATE_SCRIPT --help >/dev/null 2>&1 | |
20 | if test $? != 0; then | |
21 | echo "# Failed to run the validation script, Babeltrace Python bindings might be missing" | |
22 | DISABLE_VALIDATE=1 | |
23 | fi | |
24 | ||
25 | LAST_WARNING=$(dmesg | grep " WARNING:" | cut -d' ' -f1 | tail -1) | |
26 | LAST_OOPS=$(dmesg | grep " OOPS:" | cut -d' ' -f1 | tail -1) | |
27 | LAST_BUG=$(dmesg | grep " BUG:" | cut -d' ' -f1 | tail -1) | |
28 | ||
2a2ac572 JG |
29 | SUPPORTED_SYSCALLS_LIST=$("$CURDIR"/select_poll_epoll --list-supported-test-syscalls) |
30 | SUPPORTED_SYSCALLS_COUNT=$(echo $SUPPORTED_SYSCALLS_LIST | awk -F '[\t,]' '{print NF}') | |
31 | ||
32 | # Two tests validate their trace for every supported syscall | |
33 | NUM_TESTS=$((88+(2*SUPPORTED_SYSCALLS_COUNT))) | |
34 | ||
d40c2620 | 35 | # shellcheck source=../../utils/utils.sh |
a0b1f42c JD |
36 | source $TESTDIR/utils/utils.sh |
37 | ||
38 | function check_trace_content() | |
39 | { | |
40 | if test $DISABLE_VALIDATE == 1; then | |
41 | ok 0 "Validation skipped" | |
42 | return | |
43 | fi | |
44 | ||
45 | $VALIDATE_SCRIPT $@ | |
46 | if test $? = 0; then | |
47 | ok 0 "Validation success" | |
48 | else | |
49 | fail "Validation" | |
50 | fi | |
51 | } | |
52 | ||
53 | function test_working_cases() | |
54 | { | |
a0b1f42c | 55 | SESSION_NAME="syscall_payload" |
8d5a3312 MJ |
56 | TRACE_PATH=$(mktemp -d -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") |
57 | TEST_VALIDATION_OUTPUT_PATH=$(mktemp -u -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") | |
a0b1f42c | 58 | |
a0b1f42c JD |
59 | diag "Working cases for select, pselect6, poll, ppoll and epoll, waiting for input" |
60 | ||
d40c2620 | 61 | create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" |
a0b1f42c | 62 | |
2a2ac572 | 63 | lttng_enable_kernel_syscall_ok $SESSION_NAME $SUPPORTED_SYSCALLS_LIST |
a0b1f42c JD |
64 | add_context_kernel_ok $SESSION_NAME channel0 pid |
65 | ||
66 | start_lttng_tracing_ok | |
2a2ac572 | 67 | yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t working_cases |
a0b1f42c | 68 | stop_lttng_tracing_ok |
a0b1f42c | 69 | |
2a2ac572 JG |
70 | validate_trace "$SUPPORTED_SYSCALLS_LIST" "$TRACE_PATH" |
71 | check_trace_content -t working_cases --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" | |
a0b1f42c JD |
72 | |
73 | destroy_lttng_session_ok $SESSION_NAME | |
74 | ||
d40c2620 JG |
75 | rm -rf "$TRACE_PATH" |
76 | rm -f "$TEST_VALIDATION_OUTPUT_PATH" | |
a0b1f42c JD |
77 | } |
78 | ||
79 | function test_timeout_cases() | |
80 | { | |
a0b1f42c | 81 | SESSION_NAME="syscall_payload" |
8d5a3312 MJ |
82 | TRACE_PATH=$(mktemp -d -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") |
83 | TEST_VALIDATION_OUTPUT_PATH=$(mktemp -u -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") | |
a0b1f42c | 84 | |
a0b1f42c JD |
85 | diag "Timeout cases (1ms) for select, pselect6, poll, ppoll and epoll" |
86 | ||
d40c2620 | 87 | create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" |
a0b1f42c | 88 | |
2a2ac572 | 89 | lttng_enable_kernel_syscall_ok $SESSION_NAME "$SUPPORTED_SYSCALLS_LIST" |
a0b1f42c JD |
90 | add_context_kernel_ok $SESSION_NAME channel0 pid |
91 | ||
92 | start_lttng_tracing_ok | |
2a2ac572 | 93 | yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t working_cases_timeout |
a0b1f42c | 94 | stop_lttng_tracing_ok |
a0b1f42c | 95 | |
2a2ac572 JG |
96 | validate_trace "$SUPPORTED_SYSCALLS_LIST" "$TRACE_PATH" |
97 | check_trace_content -t working_cases_timeout --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null | |
a0b1f42c JD |
98 | |
99 | destroy_lttng_session_ok $SESSION_NAME | |
100 | ||
d40c2620 JG |
101 | rm -rf "$TRACE_PATH" |
102 | rm -f "$TEST_VALIDATION_OUTPUT_PATH" | |
a0b1f42c JD |
103 | } |
104 | ||
8b3b99e2 | 105 | function test_pselect_invalid_fd() |
a0b1f42c | 106 | { |
a0b1f42c | 107 | SESSION_NAME="syscall_payload" |
2a2ac572 | 108 | local SYSCALL_LIST="pselect6" |
8d5a3312 MJ |
109 | TRACE_PATH=$(mktemp -d -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") |
110 | TEST_VALIDATION_OUTPUT_PATH=$(mktemp -u -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") | |
a0b1f42c | 111 | |
8b3b99e2 | 112 | diag "pselect with invalid FD" |
a0b1f42c | 113 | |
d40c2620 | 114 | create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" |
a0b1f42c JD |
115 | |
116 | lttng_enable_kernel_syscall_ok $SESSION_NAME $SYSCALL_LIST | |
117 | add_context_kernel_ok $SESSION_NAME channel0 pid | |
118 | ||
119 | start_lttng_tracing_ok | |
2a2ac572 | 120 | yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t pselect_invalid_fd |
a0b1f42c | 121 | stop_lttng_tracing_ok |
a0b1f42c | 122 | |
d40c2620 | 123 | validate_trace "$SYSCALL_LIST" "$TRACE_PATH" |
2a2ac572 | 124 | check_trace_content -t pselect_invalid_fd --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null |
a0b1f42c JD |
125 | |
126 | destroy_lttng_session_ok $SESSION_NAME | |
127 | ||
d40c2620 JG |
128 | rm -rf "$TRACE_PATH" |
129 | rm -f "$TEST_VALIDATION_OUTPUT_PATH" | |
a0b1f42c JD |
130 | } |
131 | ||
2a2ac572 | 132 | function test_ppoll_big() |
a0b1f42c | 133 | { |
a0b1f42c | 134 | SESSION_NAME="syscall_payload" |
2a2ac572 | 135 | local SYSCALL_LIST="ppoll" |
8d5a3312 MJ |
136 | TRACE_PATH=$(mktemp -d -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") |
137 | TEST_VALIDATION_OUTPUT_PATH=$(mktemp -u -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") | |
a0b1f42c JD |
138 | |
139 | diag "ppoll with 2047 FDs" | |
140 | ||
d40c2620 | 141 | create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" |
a0b1f42c JD |
142 | |
143 | lttng_enable_kernel_syscall_ok $SESSION_NAME $SYSCALL_LIST | |
144 | add_context_kernel_ok $SESSION_NAME channel0 pid | |
145 | ||
146 | start_lttng_tracing_ok | |
2a2ac572 | 147 | yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t ppoll_big |
a0b1f42c | 148 | stop_lttng_tracing_ok |
a0b1f42c | 149 | |
d40c2620 | 150 | validate_trace "$SYSCALL_LIST" "$TRACE_PATH" |
2a2ac572 | 151 | check_trace_content -t ppoll_big --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null |
a0b1f42c JD |
152 | |
153 | destroy_lttng_session_ok $SESSION_NAME | |
154 | ||
d40c2620 JG |
155 | rm -rf "$TRACE_PATH" |
156 | rm -f "$TEST_VALIDATION_OUTPUT_PATH" | |
a0b1f42c JD |
157 | } |
158 | ||
2a2ac572 | 159 | function test_ppoll_fds_buffer_overflow() |
a0b1f42c | 160 | { |
a0b1f42c | 161 | SESSION_NAME="syscall_payload" |
2a2ac572 | 162 | local SYSCALL_LIST="ppoll" |
8d5a3312 MJ |
163 | TRACE_PATH=$(mktemp -d -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") |
164 | TEST_VALIDATION_OUTPUT_PATH=$(mktemp -u -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") | |
a0b1f42c JD |
165 | |
166 | diag "ppoll buffer overflow, should segfault, waits for input" | |
167 | ||
d40c2620 | 168 | create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" |
a0b1f42c JD |
169 | |
170 | lttng_enable_kernel_syscall_ok $SESSION_NAME $SYSCALL_LIST | |
171 | add_context_kernel_ok $SESSION_NAME channel0 pid | |
172 | ||
173 | start_lttng_tracing_ok | |
174 | diag "Expect segfaults" | |
2a2ac572 | 175 | yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t ppoll_fds_buffer_overflow |
a0b1f42c | 176 | stop_lttng_tracing_ok |
a0b1f42c | 177 | |
d40c2620 | 178 | validate_trace "$SYSCALL_LIST" "$TRACE_PATH" |
a0b1f42c | 179 | |
2a2ac572 | 180 | check_trace_content -t ppoll_fds_buffer_overflow --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null |
a0b1f42c JD |
181 | |
182 | destroy_lttng_session_ok $SESSION_NAME | |
183 | ||
d40c2620 JG |
184 | rm -rf "$TRACE_PATH" |
185 | rm -f "$TEST_VALIDATION_OUTPUT_PATH" | |
a0b1f42c JD |
186 | } |
187 | ||
2a2ac572 | 188 | function test_pselect_invalid_pointer() |
a0b1f42c | 189 | { |
a0b1f42c | 190 | SESSION_NAME="syscall_payload" |
2a2ac572 | 191 | local SYSCALL_LIST="pselect6" |
8d5a3312 MJ |
192 | TRACE_PATH=$(mktemp -d -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") |
193 | TEST_VALIDATION_OUTPUT_PATH=$(mktemp -u -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") | |
a0b1f42c JD |
194 | |
195 | diag "pselect with invalid pointer, waits for input" | |
196 | ||
d40c2620 | 197 | create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" |
a0b1f42c JD |
198 | |
199 | lttng_enable_kernel_syscall_ok $SESSION_NAME $SYSCALL_LIST | |
200 | add_context_kernel_ok $SESSION_NAME channel0 pid | |
201 | ||
202 | start_lttng_tracing_ok | |
2a2ac572 | 203 | yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t pselect_invalid_pointer |
a0b1f42c | 204 | stop_lttng_tracing_ok |
a0b1f42c | 205 | |
d40c2620 | 206 | validate_trace "$SYSCALL_LIST" "$TRACE_PATH" |
2a2ac572 | 207 | check_trace_content -t pselect_invalid_pointer --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null |
a0b1f42c JD |
208 | |
209 | destroy_lttng_session_ok $SESSION_NAME | |
210 | ||
d40c2620 JG |
211 | rm -rf "$TRACE_PATH" |
212 | rm -f "$TEST_VALIDATION_OUTPUT_PATH" | |
a0b1f42c JD |
213 | } |
214 | ||
2a2ac572 | 215 | function test_ppoll_fds_ulong_max() |
a0b1f42c | 216 | { |
a0b1f42c | 217 | SESSION_NAME="syscall_payload" |
2a2ac572 | 218 | local SYSCALL_LIST="ppoll" |
8d5a3312 MJ |
219 | TRACE_PATH=$(mktemp -d -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") |
220 | TEST_VALIDATION_OUTPUT_PATH=$(mktemp -u -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") | |
a0b1f42c JD |
221 | |
222 | diag "ppoll with ulong_max fds, waits for input" | |
223 | ||
d40c2620 | 224 | create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" |
a0b1f42c JD |
225 | |
226 | lttng_enable_kernel_syscall_ok $SESSION_NAME $SYSCALL_LIST | |
227 | add_context_kernel_ok $SESSION_NAME channel0 pid | |
228 | ||
229 | start_lttng_tracing_ok | |
2a2ac572 | 230 | yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t ppoll_fds_ulong_max |
a0b1f42c | 231 | stop_lttng_tracing_ok |
a0b1f42c | 232 | |
d40c2620 | 233 | validate_trace "$SYSCALL_LIST" "$TRACE_PATH" |
2a2ac572 | 234 | check_trace_content -t ppoll_fds_ulong_max --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null |
a0b1f42c JD |
235 | |
236 | destroy_lttng_session_ok $SESSION_NAME | |
237 | ||
d40c2620 JG |
238 | rm -rf "$TRACE_PATH" |
239 | rm -f "$TEST_VALIDATION_OUTPUT_PATH" | |
a0b1f42c JD |
240 | } |
241 | ||
2a2ac572 | 242 | function test_epoll_pwait_invalid_pointer() |
a0b1f42c | 243 | { |
a0b1f42c | 244 | SESSION_NAME="syscall_payload" |
2a2ac572 | 245 | local SYSCALL_LIST="epoll_pwait" |
8d5a3312 MJ |
246 | TRACE_PATH=$(mktemp -d -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") |
247 | TEST_VALIDATION_OUTPUT_PATH=$(mktemp -u -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") | |
a0b1f42c JD |
248 | |
249 | diag "epoll_pwait with invalid pointer, waits for input" | |
250 | ||
d40c2620 | 251 | create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" |
a0b1f42c JD |
252 | |
253 | lttng_enable_kernel_syscall_ok $SESSION_NAME $SYSCALL_LIST | |
254 | add_context_kernel_ok $SESSION_NAME channel0 pid | |
255 | ||
256 | start_lttng_tracing_ok | |
2a2ac572 | 257 | yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t epoll_pwait_invalid_pointer |
a0b1f42c | 258 | stop_lttng_tracing_ok |
a0b1f42c | 259 | |
d40c2620 | 260 | validate_trace "$SYSCALL_LIST" "$TRACE_PATH" |
2a2ac572 | 261 | check_trace_content -t epoll_pwait_invalid_pointer --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null |
a0b1f42c JD |
262 | |
263 | destroy_lttng_session_ok $SESSION_NAME | |
264 | ||
d40c2620 JG |
265 | rm -rf "$TRACE_PATH" |
266 | rm -f "$TEST_VALIDATION_OUTPUT_PATH" | |
a0b1f42c JD |
267 | } |
268 | ||
2a2ac572 | 269 | function test_epoll_pwait_fds_int_max() |
a0b1f42c | 270 | { |
a0b1f42c | 271 | SESSION_NAME="syscall_payload" |
2a2ac572 | 272 | local SYSCALL_LIST="epoll_pwait" |
8d5a3312 MJ |
273 | TRACE_PATH=$(mktemp -d -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") |
274 | TEST_VALIDATION_OUTPUT_PATH=$(mktemp -u -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") | |
a0b1f42c JD |
275 | |
276 | diag "epoll_pwait with maxevents set to INT_MAX, waits for input" | |
277 | ||
d40c2620 | 278 | create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" |
a0b1f42c JD |
279 | |
280 | lttng_enable_kernel_syscall_ok $SESSION_NAME $SYSCALL_LIST | |
281 | add_context_kernel_ok $SESSION_NAME channel0 pid | |
282 | ||
283 | start_lttng_tracing_ok | |
2a2ac572 | 284 | yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t epoll_pwait_int_max |
a0b1f42c | 285 | stop_lttng_tracing_ok |
a0b1f42c | 286 | |
d40c2620 | 287 | validate_trace "$SYSCALL_LIST" "$TRACE_PATH" |
2a2ac572 | 288 | check_trace_content -t epoll_pwait_int_max --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null |
a0b1f42c JD |
289 | |
290 | destroy_lttng_session_ok $SESSION_NAME | |
291 | ||
d40c2620 JG |
292 | rm -rf "$TRACE_PATH" |
293 | rm -f "$TEST_VALIDATION_OUTPUT_PATH" | |
a0b1f42c JD |
294 | } |
295 | ||
2a2ac572 | 296 | function test_ppoll_concurrent_write() |
a0b1f42c | 297 | { |
a0b1f42c | 298 | SESSION_NAME="syscall_payload" |
2a2ac572 | 299 | local SYSCALL_LIST="ppoll" |
8d5a3312 MJ |
300 | TRACE_PATH=$(mktemp -d -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") |
301 | TEST_VALIDATION_OUTPUT_PATH=$(mktemp -u -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") | |
a0b1f42c JD |
302 | |
303 | diag "ppoll with concurrent updates of the structure from user-space, stress test (3000 iterations), waits for input + timeout 1ms" | |
304 | ||
d40c2620 | 305 | create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" |
a0b1f42c JD |
306 | |
307 | lttng_enable_kernel_syscall_ok $SESSION_NAME $SYSCALL_LIST | |
308 | add_context_kernel_ok $SESSION_NAME channel0 pid | |
309 | ||
310 | start_lttng_tracing_ok | |
2a2ac572 | 311 | yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t ppoll_concurrent_write |
a0b1f42c | 312 | stop_lttng_tracing_ok |
a0b1f42c | 313 | |
d40c2620 | 314 | validate_trace "$SYSCALL_LIST" "$TRACE_PATH" |
2a2ac572 | 315 | check_trace_content -t ppoll_concurrent_write --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null |
a0b1f42c JD |
316 | |
317 | destroy_lttng_session_ok $SESSION_NAME | |
318 | ||
d40c2620 JG |
319 | rm -rf "$TRACE_PATH" |
320 | rm -f "$TEST_VALIDATION_OUTPUT_PATH" | |
a0b1f42c JD |
321 | } |
322 | ||
2a2ac572 | 323 | function test_epoll_pwait_concurrent_unmap() |
a0b1f42c | 324 | { |
a0b1f42c | 325 | SESSION_NAME="syscall_payload" |
2a2ac572 | 326 | local SYSCALL_LIST="epoll_ctl,epoll_pwait" |
8d5a3312 MJ |
327 | TRACE_PATH=$(mktemp -d -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") |
328 | TEST_VALIDATION_OUTPUT_PATH=$(mktemp -u -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") | |
a0b1f42c JD |
329 | |
330 | diag "epoll_pwait with concurrent munmap of the buffer from user-space, should randomly segfault, run multiple times, waits for input + timeout 1ms" | |
331 | ||
d40c2620 | 332 | create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" |
a0b1f42c JD |
333 | |
334 | lttng_enable_kernel_syscall_ok $SESSION_NAME $SYSCALL_LIST | |
335 | add_context_kernel_ok $SESSION_NAME channel0 pid | |
336 | ||
337 | start_lttng_tracing_ok | |
338 | diag "Expect segfaults" | |
339 | for i in $(seq 1 100); do | |
2a2ac572 | 340 | yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t epoll_pwait_concurrent_munmap |
a0b1f42c | 341 | done |
a0b1f42c JD |
342 | stop_lttng_tracing_ok |
343 | ||
344 | # epoll_wait is not always generated in the trace (stress test) | |
d40c2620 | 345 | validate_trace "epoll_ctl" "$TRACE_PATH" |
2a2ac572 | 346 | check_trace_content -t epoll_pwait_concurrent_munmap --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null |
a0b1f42c JD |
347 | |
348 | destroy_lttng_session_ok $SESSION_NAME | |
349 | ||
d40c2620 JG |
350 | rm -rf "$TRACE_PATH" |
351 | rm -f "$TEST_VALIDATION_OUTPUT_PATH" | |
a0b1f42c JD |
352 | } |
353 | ||
354 | # MUST set TESTDIR before calling those functions | |
355 | plan_tests $NUM_TESTS | |
356 | ||
357 | print_test_banner "$TEST_DESC" | |
358 | ||
564b41c4 JR |
359 | # Only run this test on x86 and arm |
360 | uname -m | grep -E "x86|i686|arm|aarch64" >/dev/null 2>&1 | |
361 | if test $? != 0; then | |
362 | skip 0 "Run only on x86 and arm. Skipping all tests." $NUM_TESTS | |
363 | exit 0 | |
364 | fi | |
365 | ||
a0b1f42c JD |
366 | if [ "$(id -u)" == "0" ]; then |
367 | isroot=1 | |
368 | else | |
369 | isroot=0 | |
370 | fi | |
371 | ||
2a2ac572 JG |
372 | diag "Supported syscalls are $SUPPORTED_SYSCALLS_LIST" |
373 | ||
a0b1f42c JD |
374 | skip $isroot "Root access is needed. Skipping all tests." $NUM_TESTS || |
375 | { | |
0159fa50 JR |
376 | validate_lttng_modules_present |
377 | ||
a0b1f42c JD |
378 | start_lttng_sessiond |
379 | ||
380 | test_working_cases | |
381 | test_timeout_cases | |
8b3b99e2 | 382 | test_pselect_invalid_fd |
2a2ac572 JG |
383 | test_ppoll_big |
384 | test_ppoll_fds_buffer_overflow | |
385 | test_pselect_invalid_pointer | |
386 | test_ppoll_fds_ulong_max | |
387 | test_epoll_pwait_invalid_pointer | |
388 | test_epoll_pwait_fds_int_max | |
389 | test_ppoll_concurrent_write | |
390 | test_epoll_pwait_concurrent_unmap | |
a0b1f42c JD |
391 | |
392 | stop_lttng_sessiond | |
393 | ||
394 | NEW_WARNING=$(dmesg | grep " WARNING:" | cut -d' ' -f1 | tail -1) | |
395 | NEW_OOPS=$(dmesg | grep " OOPS:" | cut -d' ' -f1 | tail -1) | |
396 | NEW_BUG=$(dmesg | grep " BUG:" | cut -d' ' -f1 | tail -1) | |
397 | ||
398 | if test "$LAST_WARNING" != "$NEW_WARNING"; then | |
399 | fail "New WARNING generated" | |
400 | fi | |
401 | if test "$LAST_OOPS" != "$NEW_OOPS"; then | |
402 | fail "New OOPS generated" | |
403 | fi | |
404 | if test "$LAST_BUG" != "$NEW_BUG"; then | |
405 | fail "New BUG generated" | |
406 | fi | |
407 | } |