Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1#!/bin/sh
2# perf trace enum augmentation tests
3# SPDX-License-Identifier: GPL-2.0
4
5err=0
6set -e
7
8syscall="landlock_add_rule"
9non_syscall="timer:hrtimer_setup,timer:hrtimer_start"
10
11TESTPROG="perf test -w landlock"
12
13# shellcheck source=lib/probe.sh
14. "$(dirname $0)"/lib/probe.sh
15skip_if_no_perf_trace || exit 2
16[ "$(id -u)" = 0 ] || exit 2
17
18check_vmlinux() {
19 echo "Checking if vmlinux exists"
20 if ! ls /sys/kernel/btf/vmlinux 1>/dev/null 2>&1
21 then
22 echo "trace+enum test [Skipped missing vmlinux BTF support]"
23 err=2
24 fi
25}
26
27trace_landlock() {
28 echo "Tracing syscall ${syscall}"
29
30 # test flight just to see if landlock_add_rule is available
31 if ! perf trace $TESTPROG 2>&1 | grep -q landlock
32 then
33 echo "No landlock system call found, skipping to non-syscall tracing."
34 return
35 fi
36
37 if perf trace -e $syscall $TESTPROG 2>&1 | \
38 grep -q -E ".*landlock_add_rule\(ruleset_fd: 11, rule_type: (LANDLOCK_RULE_PATH_BENEATH|LANDLOCK_RULE_NET_PORT), rule_attr: 0x[a-f0-9]+, flags: 45\) = -1.*"
39 then
40 err=0
41 else
42 err=1
43 fi
44}
45
46trace_non_syscall() {
47 echo "Tracing non-syscall tracepoint ${non-syscall}"
48 if perf trace -e $non_syscall --max-events=1 2>&1 | \
49 grep -q -E '.*timer:hrtimer_.*\(.*mode: HRTIMER_MODE_.*\)$'
50 then
51 err=0
52 else
53 err=1
54 fi
55}
56
57check_vmlinux
58
59if [ $err = 0 ]; then
60 trace_landlock
61fi
62
63if [ $err = 0 ]; then
64 trace_non_syscall
65fi
66
67exit $err