testapp: gen-syscall-events: use dynamic paths provided via args
authorJonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Wed, 6 May 2020 00:08:34 +0000 (20:08 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Thu, 4 Mar 2021 18:32:00 +0000 (13:32 -0500)
This is to try and mitigate the limitation found here:
https://bugs.lttng.org/issues/1261

Using an argument ensures that the path is not in the .rodata section of
the executable and reduces the chance that the kernel tracer incurs a
page fault when attempting to serialize the path argument.

The path is pre-faulted to mitigate the problem described in #1261.

Fixes #1261

Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: I6b6173ee5d8b33dcdf1cc391db9d1eafe00f90b9
Depends-on: lttng-ust: I5a800fc92e588c2a6a0e26282b0ad5f31c044479

tests/regression/kernel/test_callstack
tests/regression/kernel/test_syscall
tests/utils/testapp/gen-syscall-events/gen-syscall-events.c

index c4a6200dae0351e2ad86ee727d11631fec0f28fb..42c3fcce404195accc5c047113900ad41d3a6d88 100755 (executable)
@@ -33,12 +33,15 @@ function lttng_track_pid()
 function run_workload()
 {
        local TEST_APP=$1
+       # shift the first argument, passing along the other args if any to the
+       # test app.
+       shift
        local start_file_sync
        start_file_sync=$(mktemp -u)
 
        lttng_untrack_all
 
-       ./"$TEST_APP" "$start_file_sync" &
+       ./"$TEST_APP" "$start_file_sync" "$@" &
        PID=$!
        lttng_track_pid $PID
 
@@ -108,7 +111,7 @@ function test_kernel_callstack()
        lttng_enable_kernel_syscall_ok "$SESSION_NAME" "$EVENT_NAME" "$CHANNEL_NAME"
        add_context_kernel_ok "$SESSION_NAME" "$CHANNEL_NAME" "callstack-kernel"
 
-       run_workload $TEST_APP_KERNELSPACE
+       run_workload "$TEST_APP_KERNELSPACE" "/proc/cpuinfo" "/proc/cmdline"
 
        destroy_lttng_session_ok "$SESSION_NAME"
 
index 9ce40dcc52bf5fc84ae7643090169d87630552ec..69a2bab8f11e41f65610876d7aff4de2362c9313 100755 (executable)
@@ -27,7 +27,7 @@ function trace_testapp()
        lttng_untrack_kernel_all_ok
 
        # Launch the testapp and save its Process ID
-       ./"$TESTCMD" "$start_file_sync" &
+       ./"$TESTCMD" "$start_file_sync" "/proc/cpuinfo" "/proc/cmdline" &
        PID=$!
 
        # Set LTTng to track this PID and start the tracing
index 1ec29139e4f5d760c56d5ba27cdab4ab374a8ae1..9ab65093307513666b76fe5100919d163b35ded8 100644 (file)
@@ -88,16 +88,19 @@ error:
 int main(int argc, char **argv)
 {
        int ret;
-       char *start_file;
+       const char *start_file, *path1, *path2;
 
-       if (argc != 2) {
+       if (argc != 4) {
                fprintf(stderr, "Error: Missing argument\n");
+               fprintf(stderr, "USAGE: %s PATH_WAIT_FILE PATH1_TO_OPEN PATH2_TO_OPEN\n", argv[0]);
                fprintf(stderr, "USAGE: %s PATH_WAIT_FILE\n", argv[0]);
                ret = -1;
                goto error;
        }
 
        start_file = argv[1];
+       path1 = argv[2];
+       path2 = argv[3];
 
        /*
         * Wait for the start_file to be created by an external process
@@ -112,13 +115,13 @@ int main(int argc, char **argv)
         * Start generating syscalls. We use syscall(2) to prevent libc to change
         * the underlying syscall. e.g. calling openat(2) instead of open(2).
         */
-       ret = open_read_close("/proc/cpuinfo");
+       ret = open_read_close(path1);
        if (ret == -1) {
                ret = -1;
                goto error;
        }
 
-       ret = open_read_close("/proc/cmdline");
+       ret = open_read_close(path2);
        if (ret == -1) {
                ret = -1;
                goto error;
This page took 0.036497 seconds and 4 git commands to generate.