#!/bin/bash
#
-# Copyright (C) - 2013 Christian Babeux <christian.babeux@efficios.com>
-# Copyright (C) - 2014 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+# Copyright (C) 2013 Christian Babeux <christian.babeux@efficios.com>
+# Copyright (C) 2014 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
#
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License, version 2 only, as
-# published by the Free Software Foundation.
+# SPDX-License-Identifier: GPL-2.0-only
#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-# more details.
-#
-# You should have received a copy of the GNU General Public License along with
-# this program; if not, write to the Free Software Foundation, Inc., 51
-# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
TEST_DESC="Kernel tracer - System calls"
CURDIR=$(dirname $0)/
TESTDIR=$CURDIR/../..
-NUM_TESTS=183
+NUM_TESTS=214
# `gen-syscall-event` starts and waits for the creation a file passed by
# arguments to start executing 3 syscalls (open,read,close) and returning.
create_lttng_session_ok $SESSION_NAME $TRACE_PATH
- lttng_enable_kernel_syscall_ok $SESSION_NAME "open"
+ lttng_enable_kernel_syscall_ok $SESSION_NAME "openat"
trace_testapp
# ensure all events are in the trace.
- validate_trace_exp "-e syscall_entry_open: -e compat_syscall_entry_open:" $TRACE_PATH
- validate_trace_exp "-e syscall_exit_open: -e compat_syscall_exit_open:" $TRACE_PATH
+ validate_trace_exp "-e syscall_entry_openat: -e compat_syscall_entry_openat:" $TRACE_PATH
+ validate_trace_exp "-e syscall_exit_openat: -e compat_syscall_exit_openat:" $TRACE_PATH
# ensure trace only contains those.
- validate_trace_only_exp "-e syscall_entry_open: -e compat_syscall_entry_open: -e syscall_exit_open: -e compat_syscall_exit_open:" $TRACE_PATH
+ validate_trace_only_exp "-e syscall_entry_openat: -e compat_syscall_entry_openat: -e syscall_exit_openat: -e compat_syscall_exit_openat:" $TRACE_PATH
destroy_lttng_session_ok $SESSION_NAME
create_lttng_session_ok $SESSION_NAME $TRACE_PATH
- lttng_enable_kernel_syscall_ok $SESSION_NAME "open"
+ lttng_enable_kernel_syscall_ok $SESSION_NAME "openat"
lttng_enable_kernel_syscall_ok $SESSION_NAME "close"
trace_testapp
# ensure all events are in the trace.
- validate_trace_exp "-e syscall_entry_open: -e compat_syscall_entry_open:" $TRACE_PATH
- validate_trace_exp "-e syscall_exit_open: -e compat_syscall_exit_open:" $TRACE_PATH
+ validate_trace_exp "-e syscall_entry_openat: -e compat_syscall_entry_openat:" $TRACE_PATH
+ validate_trace_exp "-e syscall_exit_openat: -e compat_syscall_exit_openat:" $TRACE_PATH
validate_trace_exp "-e syscall_entry_close: -e compat_syscall_entry_close:" $TRACE_PATH
validate_trace_exp "-e syscall_exit_close: -e compat_syscall_exit_close:" $TRACE_PATH
# ensure trace only contains those.
- validate_trace_only_exp "-e syscall_entry_open: -e compat_syscall_entry_open: -e syscall_exit_open: -e compat_syscall_exit_open: -e syscall_entry_close: -e compat_syscall_entry_close: -e syscall_exit_close: -e compat_syscall_exit_close:" $TRACE_PATH
+ validate_trace_only_exp "-e syscall_entry_openat: -e compat_syscall_entry_openat: -e syscall_exit_openat: -e compat_syscall_exit_openat: -e syscall_entry_close: -e compat_syscall_entry_close: -e syscall_exit_close: -e compat_syscall_exit_close:" $TRACE_PATH
destroy_lttng_session_ok $SESSION_NAME
trace_testapp
# ensure at least open and close are there.
- validate_trace_exp "-e syscall_entry_open: -e compat_syscall_entry_open:" $TRACE_PATH
- validate_trace_exp "-e syscall_exit_open: -e compat_syscall_exit_open:" $TRACE_PATH
+ validate_trace_exp "-e syscall_entry_openat: -e compat_syscall_entry_openat:" $TRACE_PATH
+ validate_trace_exp "-e syscall_exit_openat: -e compat_syscall_exit_openat:" $TRACE_PATH
validate_trace_exp "-e syscall_entry_close: -e compat_syscall_entry_close:" $TRACE_PATH
validate_trace_exp "-e syscall_exit_close: -e compat_syscall_exit_close:" $TRACE_PATH
# trace may contain other syscalls.
lttng_enable_kernel_syscall_ok $SESSION_NAME
# try to disable open system call: fails because enabler semantic of
# "all syscalls" is not "the open" system call.
- lttng_disable_kernel_syscall_fail $SESSION_NAME "open"
+ lttng_disable_kernel_syscall_fail $SESSION_NAME "openat"
trace_testapp
- # ensure "open" syscall is there.
- validate_trace_exp "-e syscall_entry_open: -e compat_syscall_entry_open: -e syscall_exit_open: -e compat_syscall_exit_open:" $TRACE_PATH
+ # ensure "openat" syscall is there.
+ validate_trace_exp "-e syscall_entry_openat: -e compat_syscall_entry_openat: -e syscall_exit_openat: -e compat_syscall_exit_openat:" $TRACE_PATH
# ensure "close" syscall is there.
validate_trace_exp "-e syscall_entry_close: -e compat_syscall_entry_close:" $TRACE_PATH
lttng_enable_kernel_syscall_ok $SESSION_NAME
# try to disable open and close system calls: fails because enabler
# semantic of "all syscalls" is not "the open" system call.
- lttng_disable_kernel_syscall_fail $SESSION_NAME "open"
+ lttng_disable_kernel_syscall_fail $SESSION_NAME "openat"
lttng_disable_kernel_syscall_fail $SESSION_NAME "close"
trace_testapp
- # ensure "open" syscall is there.
- validate_trace_exp "-e syscall_entry_open: -e compat_syscall_entry_open: -e syscall_exit_open: -e compat_syscall_exit_open:" $TRACE_PATH
+ # ensure "openat" syscall is there.
+ validate_trace_exp "-e syscall_entry_openat: -e compat_syscall_entry_openat: -e syscall_exit_openat: -e compat_syscall_exit_openat:" $TRACE_PATH
# ensure "close" syscall is there.
validate_trace_exp "-e syscall_entry_close: -e compat_syscall_entry_close:" $TRACE_PATH
trace_testapp
# ensure at least open and close are there.
- validate_trace_exp "-e syscall_entry_open: -e compat_syscall_entry_open:" $TRACE_PATH
- validate_trace_exp "-e syscall_exit_open: -e compat_syscall_exit_open:" $TRACE_PATH
+ validate_trace_exp "-e syscall_entry_openat: -e compat_syscall_entry_openat:" $TRACE_PATH
+ validate_trace_exp "-e syscall_exit_openat: -e compat_syscall_exit_openat:" $TRACE_PATH
validate_trace_exp "-e syscall_entry_close: -e compat_syscall_entry_close:" $TRACE_PATH
validate_trace_exp "-e syscall_exit_close: -e compat_syscall_exit_close:" $TRACE_PATH
# trace may contain other syscalls.
rm -rf $TRACE_PATH
}
+function test_syscall_enable_all_enable_one_disable_all()
+{
+ TRACE_PATH=$(mktemp -d)
+ SESSION_NAME="kernel_syscall_enable_all_enable_one_disable_all"
+
+ diag "Syscall trace all events, enable one and disable all"
+
+ create_lttng_session_ok $SESSION_NAME "$TRACE_PATH"
+
+ # enable all syscalls
+ lttng_enable_kernel_syscall_ok $SESSION_NAME
+
+ # enable one specific syscall, "openat"
+ lttng_enable_kernel_syscall_ok $SESSION_NAME openat
+
+ # disable all syscalls
+ lttng_disable_kernel_syscall_ok $SESSION_NAME
+
+ trace_testapp
+
+ # The trace shouldn't contain any syscalls, disable-all should disable
+ # even individually specified syscalls
+ trace_match_only openat 0 "$TRACE_PATH"
+
+ destroy_lttng_session_ok $SESSION_NAME
+
+ rm -rf "$TRACE_PATH"
+}
+
+function test_syscall_enable_one_enable_all_disable_one()
+{
+ TRACE_PATH=$(mktemp -d)
+ SESSION_NAME="kernel_syscall_enable_one_enable_all_disable_one"
+
+ diag "Syscall trace all events and enable/disable one"
+
+ create_lttng_session_ok $SESSION_NAME "$TRACE_PATH"
+
+ # enable one specific syscall, "openat"
+ lttng_enable_kernel_syscall_ok $SESSION_NAME openat
+
+ # enable all syscalls
+ lttng_enable_kernel_syscall_ok $SESSION_NAME
+
+ # disable one specific syscall, "openat"
+ lttng_disable_kernel_syscall_ok $SESSION_NAME openat
+
+ trace_testapp
+
+ # The trace should contain all syscalls, including 'openat' because
+ # enable-all overrides individually disabled syscalls.
+ validate_trace openat "$TRACE_PATH"
+
+ destroy_lttng_session_ok $SESSION_NAME
+
+ rm -rf "$TRACE_PATH"
+}
+
+function test_syscall_enable_one_enable_all_disable_all_disable_one()
+{
+ TRACE_PATH=$(mktemp -d)
+ SESSION_NAME="kernel_syscall_enable_one_enable_all_disable_all_disable_one"
+
+ diag "Syscall trace all events and enable/disable one"
+
+ create_lttng_session_ok $SESSION_NAME "$TRACE_PATH"
+
+ # enable one specific syscall, "openat"
+ lttng_enable_kernel_syscall_ok $SESSION_NAME openat
+
+ # enable all syscalls
+ lttng_enable_kernel_syscall_ok $SESSION_NAME
+
+ # disable all syscalls
+ lttng_disable_kernel_syscall_ok $SESSION_NAME
+
+ # disable one specific syscall, "openat"
+ lttng_disable_kernel_syscall_ok $SESSION_NAME openat
+
+ trace_testapp
+
+ # The trace shouldn't contain any syscalls, disable-all should disable
+ # even individually specified syscalls
+ trace_match_only openat 0 "$TRACE_PATH"
+
+ destroy_lttng_session_ok $SESSION_NAME
+
+ rm -rf "$TRACE_PATH"
+}
+
function test_syscall_enable_all_disable_all_twice()
{
TRACE_PATH=$(mktemp -d)
create_lttng_session_ok $SESSION_NAME $TRACE_PATH
# enable open system call
- lttng_enable_kernel_syscall_ok $SESSION_NAME "open"
+ lttng_enable_kernel_syscall_ok $SESSION_NAME "openat"
# disable open system call
- lttng_disable_kernel_syscall_ok $SESSION_NAME "open"
+ lttng_disable_kernel_syscall_ok $SESSION_NAME "openat"
trace_testapp
create_lttng_session_ok $SESSION_NAME $TRACE_PATH
# enable open and close system calls
- lttng_enable_kernel_syscall_ok $SESSION_NAME "open"
+ lttng_enable_kernel_syscall_ok $SESSION_NAME "openat"
lttng_enable_kernel_syscall_ok $SESSION_NAME "close"
# disable open and close system calls
- lttng_disable_kernel_syscall_ok $SESSION_NAME "open"
+ lttng_disable_kernel_syscall_ok $SESSION_NAME "openat"
lttng_disable_kernel_syscall_ok $SESSION_NAME "close"
trace_testapp
create_lttng_session_ok $SESSION_NAME $TRACE_PATH
# enable open and close system calls
- lttng_enable_kernel_syscall_ok $SESSION_NAME "open"
+ lttng_enable_kernel_syscall_ok $SESSION_NAME "openat"
lttng_enable_kernel_syscall_ok $SESSION_NAME "close"
# disable close system call
lttng_disable_kernel_syscall_ok $SESSION_NAME "close"
trace_testapp
# ensure open is there.
- validate_trace_exp "-e syscall_entry_open: -e compat_syscall_entry_open:" $TRACE_PATH
- validate_trace_exp "-e syscall_exit_open: -e compat_syscall_exit_open:" $TRACE_PATH
+ validate_trace_exp "-e syscall_entry_openat: -e compat_syscall_entry_openat:" $TRACE_PATH
+ validate_trace_exp "-e syscall_exit_openat: -e compat_syscall_exit_openat:" $TRACE_PATH
# ensure trace only contains those.
- validate_trace_only_exp "-e syscall_entry_open: -e compat_syscall_entry_open: -e syscall_exit_open: -e compat_syscall_exit_open:" $TRACE_PATH
+ validate_trace_only_exp "-e syscall_entry_openat: -e compat_syscall_entry_openat: -e syscall_exit_openat: -e compat_syscall_exit_openat:" $TRACE_PATH
destroy_lttng_session_ok $SESSION_NAME
create_lttng_session_ok $SESSION_NAME $TRACE_PATH
- lttng_enable_kernel_syscall_ok $SESSION_NAME "open"
+ lttng_enable_kernel_syscall_ok $SESSION_NAME "openat"
# First disable will succeed
- lttng_disable_kernel_syscall_ok $SESSION_NAME "open"
+ lttng_disable_kernel_syscall_ok $SESSION_NAME "openat"
# Second disable succeeds too, due to enabler semantic.
- lttng_disable_kernel_syscall_ok $SESSION_NAME "open"
+ lttng_disable_kernel_syscall_ok $SESSION_NAME "openat"
destroy_lttng_session_ok $SESSION_NAME
lttng_enable_kernel_syscall_ok $SESSION_NAME
# Enabling an event already enabled succeeds, due to enabler semantic.
- lttng_enable_kernel_syscall_ok $SESSION_NAME "open"
+ lttng_enable_kernel_syscall_ok $SESSION_NAME "openat"
destroy_lttng_session_ok $SESSION_NAME
lttng_enable_kernel_syscall_ok $SESSION_NAME
lttng_disable_kernel_syscall_ok $SESSION_NAME
# Disabling an event already disabled fails.
- lttng_disable_kernel_syscall_fail $SESSION_NAME "open"
+ lttng_disable_kernel_syscall_fail $SESSION_NAME "openat"
destroy_lttng_session_ok $SESSION_NAME
create_lttng_session_ok $SESSION_NAME $TRACE_PATH
lttng_enable_kernel_channel_ok $SESSION_NAME $CHANNEL_NAME
- lttng_disable_kernel_syscall_fail $SESSION_NAME "open" $CHANNEL_NAME
+ lttng_disable_kernel_syscall_fail $SESSION_NAME "openat" $CHANNEL_NAME
destroy_lttng_session_ok $SESSION_NAME
test_syscall_enable_all_disable_all
test_syscall_enable_all_disable_all_enable_all
test_syscall_enable_all_disable_all_twice
+ test_syscall_enable_all_enable_one_disable_all
+ test_syscall_enable_one_enable_all_disable_one
+ test_syscall_enable_one_enable_all_disable_all_disable_one
test_syscall_enable_one_disable_one
test_syscall_enable_two_disable_two
test_syscall_enable_two_disable_one