X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=tests%2Fregression%2Fkernel%2Ftest_select_poll_epoll;h=6d5509b25990ea7960e39803cc07b2c54e6b7290;hb=d40c26206a44d9e247bbcdc01afb34c41d0c490d;hp=16b0da525c4fae8cf394aa57729dd84bb24641d6;hpb=d61d4fae208679ab4824cb0b53cfc1390803944e;p=lttng-tools.git diff --git a/tests/regression/kernel/test_select_poll_epoll b/tests/regression/kernel/test_select_poll_epoll index 16b0da525..6d5509b25 100755 --- a/tests/regression/kernel/test_select_poll_epoll +++ b/tests/regression/kernel/test_select_poll_epoll @@ -7,7 +7,7 @@ TEST_DESC="Kernel tracer - select, poll and epoll payload extraction" -CURDIR=$(dirname $0)/ +CURDIR=$(dirname "$0")/ TESTDIR=$CURDIR/../.. VALIDATE_SCRIPT="$CURDIR/validate_select_poll_epoll.py" NUM_TESTS=102 @@ -33,6 +33,7 @@ LAST_WARNING=$(dmesg | grep " WARNING:" | cut -d' ' -f1 | tail -1) LAST_OOPS=$(dmesg | grep " OOPS:" | cut -d' ' -f1 | tail -1) LAST_BUG=$(dmesg | grep " BUG:" | cut -d' ' -f1 | tail -1) +# shellcheck source=../../utils/utils.sh source $TESTDIR/utils/utils.sh function check_trace_content() @@ -52,8 +53,9 @@ function check_trace_content() function test_working_cases() { - TRACE_PATH=$(mktemp --tmpdir -d "tmp.${FUNCNAME[0]}_trace_path.XXXXXX") SESSION_NAME="syscall_payload" + TRACE_PATH=$(mktemp --tmpdir -d "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") + TEST_VALIDATION_OUTPUT_PATH=$(mktemp --tmpdir -u "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") # arm64 does not have epoll_wait uname -m | grep -E "aarch64" >/dev/null 2>&1 @@ -65,28 +67,29 @@ function test_working_cases() diag "Working cases for select, pselect6, poll, ppoll and epoll, waiting for input" - create_lttng_session_ok $SESSION_NAME $TRACE_PATH + create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" lttng_enable_kernel_syscall_ok $SESSION_NAME $SYSCALL_LIST add_context_kernel_ok $SESSION_NAME channel0 pid start_lttng_tracing_ok - { out=$(yes | $CURDIR/select_poll_epoll -t 1); } 2>/dev/null + yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 1 stop_lttng_tracing_ok - pid=$(echo $out | cut -d' ' -f1) - validate_trace "$SYSCALL_LIST" $TRACE_PATH - check_trace_content -t 1 -p $pid $TRACE_PATH + validate_trace "$SYSCALL_LIST" "$TRACE_PATH" + check_trace_content -t 1 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" destroy_lttng_session_ok $SESSION_NAME - rm -rf $TRACE_PATH + rm -rf "$TRACE_PATH" + rm -f "$TEST_VALIDATION_OUTPUT_PATH" } function test_timeout_cases() { - TRACE_PATH=$(mktemp --tmpdir -d "tmp.${FUNCNAME[0]}_trace_path.XXXXXX") SESSION_NAME="syscall_payload" + TRACE_PATH=$(mktemp --tmpdir -d "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") + TEST_VALIDATION_OUTPUT_PATH=$(mktemp --tmpdir -u "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") # arm64 does not have epoll_wait uname -m | grep -E "aarch64" >/dev/null 2>&1 @@ -98,244 +101,252 @@ function test_timeout_cases() diag "Timeout cases (1ms) for select, pselect6, poll, ppoll and epoll" - create_lttng_session_ok $SESSION_NAME $TRACE_PATH + create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" lttng_enable_kernel_syscall_ok $SESSION_NAME "$SYSCALL_LIST" add_context_kernel_ok $SESSION_NAME channel0 pid start_lttng_tracing_ok - { out=$($CURDIR/select_poll_epoll -t 2); } 2>/dev/null + yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 2 stop_lttng_tracing_ok - pid=$(echo $out | cut -d' ' -f1) - validate_trace "$SYSCALL_LIST" $TRACE_PATH - check_trace_content -t 2 -p $pid $TRACE_PATH 2>/dev/null + validate_trace "$SYSCALL_LIST" "$TRACE_PATH" + check_trace_content -t 2 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null destroy_lttng_session_ok $SESSION_NAME - rm -rf $TRACE_PATH + rm -rf "$TRACE_PATH" + rm -f "$TEST_VALIDATION_OUTPUT_PATH" } function test_pselect_invalid_fd() { - TRACE_PATH=$(mktemp --tmpdir -d "tmp.${FUNCNAME[0]}_trace_path.XXXXXX") SESSION_NAME="syscall_payload" SYSCALL_LIST="pselect6" + TRACE_PATH=$(mktemp --tmpdir -d "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") + TEST_VALIDATION_OUTPUT_PATH=$(mktemp --tmpdir -u "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") diag "pselect with invalid FD" - create_lttng_session_ok $SESSION_NAME $TRACE_PATH + create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" lttng_enable_kernel_syscall_ok $SESSION_NAME $SYSCALL_LIST add_context_kernel_ok $SESSION_NAME channel0 pid start_lttng_tracing_ok - { out=$($CURDIR/select_poll_epoll -t 3); } 2>/dev/null + yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 3 stop_lttng_tracing_ok - pid=$(echo $out | cut -d' ' -f1) - validate_trace "$SYSCALL_LIST" $TRACE_PATH - check_trace_content -t 3 -p $pid $TRACE_PATH 2>/dev/null + validate_trace "$SYSCALL_LIST" "$TRACE_PATH" + check_trace_content -t 3 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null destroy_lttng_session_ok $SESSION_NAME - rm -rf $TRACE_PATH + rm -rf "$TRACE_PATH" + rm -f "$TEST_VALIDATION_OUTPUT_PATH" } function test_big_ppoll() { - TRACE_PATH=$(mktemp --tmpdir -d "tmp.${FUNCNAME[0]}_trace_path.XXXXXX") SESSION_NAME="syscall_payload" SYSCALL_LIST="ppoll" + TRACE_PATH=$(mktemp --tmpdir -d "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") + TEST_VALIDATION_OUTPUT_PATH=$(mktemp --tmpdir -u "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") diag "ppoll with 2047 FDs" - create_lttng_session_ok $SESSION_NAME $TRACE_PATH + create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" lttng_enable_kernel_syscall_ok $SESSION_NAME $SYSCALL_LIST add_context_kernel_ok $SESSION_NAME channel0 pid start_lttng_tracing_ok - { out=$(yes | $CURDIR/select_poll_epoll -t 4); } 2>/dev/null + yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 4 stop_lttng_tracing_ok - pid=$(echo $out | cut -d' ' -f1) - validate_trace "$SYSCALL_LIST" $TRACE_PATH - check_trace_content -t 4 -p $pid $TRACE_PATH 2>/dev/null + validate_trace "$SYSCALL_LIST" "$TRACE_PATH" + check_trace_content -t 4 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null destroy_lttng_session_ok $SESSION_NAME - rm -rf $TRACE_PATH + rm -rf "$TRACE_PATH" + rm -f "$TEST_VALIDATION_OUTPUT_PATH" } function test_ppoll_overflow() { - TRACE_PATH=$(mktemp --tmpdir -d "tmp.${FUNCNAME[0]}_trace_path.XXXXXX") SESSION_NAME="syscall_payload" SYSCALL_LIST="ppoll" + TRACE_PATH=$(mktemp --tmpdir -d "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") + TEST_VALIDATION_OUTPUT_PATH=$(mktemp --tmpdir -u "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") diag "ppoll buffer overflow, should segfault, waits for input" - create_lttng_session_ok $SESSION_NAME $TRACE_PATH + create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" lttng_enable_kernel_syscall_ok $SESSION_NAME $SYSCALL_LIST add_context_kernel_ok $SESSION_NAME channel0 pid start_lttng_tracing_ok diag "Expect segfaults" - { out=$(yes | $CURDIR/select_poll_epoll -t 5); } 2>/dev/null + yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 5 stop_lttng_tracing_ok - echo $out - pid=$(echo $out | cut -d' ' -f1) - validate_trace "$SYSCALL_LIST" $TRACE_PATH + validate_trace "$SYSCALL_LIST" "$TRACE_PATH" - check_trace_content -t 5 -p $pid $TRACE_PATH 2>/dev/null + check_trace_content -t 5 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null destroy_lttng_session_ok $SESSION_NAME - rm -rf $TRACE_PATH + rm -rf "$TRACE_PATH" + rm -f "$TEST_VALIDATION_OUTPUT_PATH" } function test_pselect_invalid_ptr() { - TRACE_PATH=$(mktemp --tmpdir -d "tmp.${FUNCNAME[0]}_trace_path.XXXXXX") SESSION_NAME="syscall_payload" SYSCALL_LIST="pselect6" + TRACE_PATH=$(mktemp --tmpdir -d "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") + TEST_VALIDATION_OUTPUT_PATH=$(mktemp --tmpdir -u "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") diag "pselect with invalid pointer, waits for input" - create_lttng_session_ok $SESSION_NAME $TRACE_PATH + create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" lttng_enable_kernel_syscall_ok $SESSION_NAME $SYSCALL_LIST add_context_kernel_ok $SESSION_NAME channel0 pid start_lttng_tracing_ok - { out=$(yes | $CURDIR/select_poll_epoll -t 6); } 2>/dev/null + yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 6 stop_lttng_tracing_ok - pid=$(echo $out | cut -d' ' -f1) - validate_trace "$SYSCALL_LIST" $TRACE_PATH - check_trace_content -t 6 -p $pid $TRACE_PATH 2>/dev/null + validate_trace "$SYSCALL_LIST" "$TRACE_PATH" + check_trace_content -t 6 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null destroy_lttng_session_ok $SESSION_NAME - rm -rf $TRACE_PATH + rm -rf "$TRACE_PATH" + rm -f "$TEST_VALIDATION_OUTPUT_PATH" } function test_ppoll_ulong_max() { - TRACE_PATH=$(mktemp --tmpdir -d "tmp.${FUNCNAME[0]}_trace_path.XXXXXX") SESSION_NAME="syscall_payload" SYSCALL_LIST="ppoll" + TRACE_PATH=$(mktemp --tmpdir -d "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") + TEST_VALIDATION_OUTPUT_PATH=$(mktemp --tmpdir -u "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") diag "ppoll with ulong_max fds, waits for input" - create_lttng_session_ok $SESSION_NAME $TRACE_PATH + create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" lttng_enable_kernel_syscall_ok $SESSION_NAME $SYSCALL_LIST add_context_kernel_ok $SESSION_NAME channel0 pid start_lttng_tracing_ok - { out=$(yes | $CURDIR/select_poll_epoll -t 7); } 2>/dev/null + yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 7 stop_lttng_tracing_ok - pid=$(echo $out | cut -d' ' -f1) - validate_trace "$SYSCALL_LIST" $TRACE_PATH - check_trace_content -t 7 -p $pid $TRACE_PATH 2>/dev/null + validate_trace "$SYSCALL_LIST" "$TRACE_PATH" + check_trace_content -t 7 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null destroy_lttng_session_ok $SESSION_NAME - rm -rf $TRACE_PATH + rm -rf "$TRACE_PATH" + rm -f "$TEST_VALIDATION_OUTPUT_PATH" } function test_epoll_pwait_invalid_ptr() { - TRACE_PATH=$(mktemp --tmpdir -d "tmp.${FUNCNAME[0]}_trace_path.XXXXXX") SESSION_NAME="syscall_payload" SYSCALL_LIST="epoll_pwait" + TRACE_PATH=$(mktemp --tmpdir -d "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") + TEST_VALIDATION_OUTPUT_PATH=$(mktemp --tmpdir -u "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") diag "epoll_pwait with invalid pointer, waits for input" - create_lttng_session_ok $SESSION_NAME $TRACE_PATH + create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" lttng_enable_kernel_syscall_ok $SESSION_NAME $SYSCALL_LIST add_context_kernel_ok $SESSION_NAME channel0 pid start_lttng_tracing_ok - { out=$(yes | $CURDIR/select_poll_epoll -t 8); } 2>/dev/null + yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 8 stop_lttng_tracing_ok - pid=$(echo $out | cut -d' ' -f1) - validate_trace "$SYSCALL_LIST" $TRACE_PATH - check_trace_content -t 8 -p $pid $TRACE_PATH 2>/dev/null + validate_trace "$SYSCALL_LIST" "$TRACE_PATH" + check_trace_content -t 8 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null destroy_lttng_session_ok $SESSION_NAME - rm -rf $TRACE_PATH + rm -rf "$TRACE_PATH" + rm -f "$TEST_VALIDATION_OUTPUT_PATH" } function test_epoll_pwait_int_max() { - TRACE_PATH=$(mktemp --tmpdir -d "tmp.${FUNCNAME[0]}_trace_path.XXXXXX") SESSION_NAME="syscall_payload" SYSCALL_LIST="epoll_pwait" + TRACE_PATH=$(mktemp --tmpdir -d "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") + TEST_VALIDATION_OUTPUT_PATH=$(mktemp --tmpdir -u "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") diag "epoll_pwait with maxevents set to INT_MAX, waits for input" - create_lttng_session_ok $SESSION_NAME $TRACE_PATH + create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" lttng_enable_kernel_syscall_ok $SESSION_NAME $SYSCALL_LIST add_context_kernel_ok $SESSION_NAME channel0 pid start_lttng_tracing_ok - { out=$(yes | $CURDIR/select_poll_epoll -t 9); } 2>/dev/null + yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 9 stop_lttng_tracing_ok - pid=$(echo $out | cut -d' ' -f1) - validate_trace "$SYSCALL_LIST" $TRACE_PATH - check_trace_content -t 9 -p $pid $TRACE_PATH 2>/dev/null + validate_trace "$SYSCALL_LIST" "$TRACE_PATH" + check_trace_content -t 9 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null destroy_lttng_session_ok $SESSION_NAME - rm -rf $TRACE_PATH + rm -rf "$TRACE_PATH" + rm -f "$TEST_VALIDATION_OUTPUT_PATH" } function test_ppoll_concurrent() { - TRACE_PATH=$(mktemp --tmpdir -d "tmp.${FUNCNAME[0]}_trace_path.XXXXXX") SESSION_NAME="syscall_payload" SYSCALL_LIST="ppoll" + TRACE_PATH=$(mktemp --tmpdir -d "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") + TEST_VALIDATION_OUTPUT_PATH=$(mktemp --tmpdir -u "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") diag "ppoll with concurrent updates of the structure from user-space, stress test (3000 iterations), waits for input + timeout 1ms" - create_lttng_session_ok $SESSION_NAME $TRACE_PATH + create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" lttng_enable_kernel_syscall_ok $SESSION_NAME $SYSCALL_LIST add_context_kernel_ok $SESSION_NAME channel0 pid start_lttng_tracing_ok - { out=$(yes | $CURDIR/select_poll_epoll -t 10); } 2>/dev/null + yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 10 stop_lttng_tracing_ok - pid=$(echo $out | cut -d' ' -f1) - validate_trace "$SYSCALL_LIST" $TRACE_PATH - check_trace_content -t 10 -p $pid $TRACE_PATH 2>/dev/null + validate_trace "$SYSCALL_LIST" "$TRACE_PATH" + check_trace_content -t 10 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null destroy_lttng_session_ok $SESSION_NAME - rm -rf $TRACE_PATH + rm -rf "$TRACE_PATH" + rm -f "$TEST_VALIDATION_OUTPUT_PATH" } function test_epoll_pwait_concurrent() { - TRACE_PATH=$(mktemp --tmpdir -d "tmp.${FUNCNAME[0]}_trace_path.XXXXXX") SESSION_NAME="syscall_payload" SYSCALL_LIST="epoll_ctl,epoll_pwait" + TRACE_PATH=$(mktemp --tmpdir -d "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") + TEST_VALIDATION_OUTPUT_PATH=$(mktemp --tmpdir -u "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") diag "epoll_pwait with concurrent munmap of the buffer from user-space, should randomly segfault, run multiple times, waits for input + timeout 1ms" - create_lttng_session_ok $SESSION_NAME $TRACE_PATH + create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" lttng_enable_kernel_syscall_ok $SESSION_NAME $SYSCALL_LIST add_context_kernel_ok $SESSION_NAME channel0 pid @@ -343,18 +354,18 @@ function test_epoll_pwait_concurrent() start_lttng_tracing_ok diag "Expect segfaults" for i in $(seq 1 100); do - { out=$($CURDIR/select_poll_epoll -t 11); } 2>/dev/null + yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 11 done - pid=$(echo $out | cut -d' ' -f1) stop_lttng_tracing_ok # epoll_wait is not always generated in the trace (stress test) - validate_trace "epoll_ctl" $TRACE_PATH - check_trace_content -t 11 -p $pid $TRACE_PATH 2>/dev/null + validate_trace "epoll_ctl" "$TRACE_PATH" + check_trace_content -t 11 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null destroy_lttng_session_ok $SESSION_NAME - rm -rf $TRACE_PATH + rm -rf "$TRACE_PATH" + rm -f "$TEST_VALIDATION_OUTPUT_PATH" } # MUST set TESTDIR before calling those functions