summaryrefslogtreecommitdiff
path: root/tests/filtering_syscall-syntax.test
blob: a4ca40b504a340c09c6bd8b880f997203411c053 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#!/bin/sh
#
# Check syscall set parsing syntax.
#
# Copyright (c) 2016-2018 Dmitry V. Levin <ldv@strace.io>
# Copyright (c) 2017 Nikolay Marchuk <marchuk.nikolay.a@gmail.com>
# Copyright (c) 2018-2022 The strace developers.
# All rights reserved.
#
# SPDX-License-Identifier: GPL-2.0-or-later

. "${srcdir=.}/syntax.sh"

check_syscall()
{
	[ -z "$2" ] || check_e "invalid system call '$1'" -e"$2"

	check_e "invalid system call '$1'" -e "$2"
	check_e "invalid system call '$1'" -etrace="$2"
	check_e "invalid system call '$1'" --trace="$2"
	check_e "invalid system call '$1'" -e trace="$2"

	check_e "invalid system call '$1'" -eabbrev="$2"
	check_e "invalid system call '$1'" --abbrev="$2"
	check_e "invalid system call '$1'" -e abbrev="$2"

	check_e "invalid system call '$1'" -everbose="$2"
	check_e "invalid system call '$1'" --verbose="$2"
	check_e "invalid system call '$1'" -e verbose="$2"

	check_e "invalid system call '$1'" -eraw="$2"
	check_e "invalid system call '$1'" --raw="$2"
	check_e "invalid system call '$1'" -e raw="$2"

	check_e "invalid system call '$1'" -einject="$2"
	check_e "invalid system call '$1'" --inject="$2"
	check_e "invalid system call '$1'" -e inject="$2"
	check_e "invalid system call '$1'" -einject="$2:"
	check_e "invalid system call '$1'" -einject="$2::"
	check_e "invalid system call '$1'" -einject="$2:::"
	check_e "invalid system call '$1'" --inject="$2:"
	check_e "invalid system call '$1'" --inject="$2::"
	check_e "invalid system call '$1'" --inject="$2:::"
	check_e "invalid system call '$1'" -e inject="$2:"
	check_e "invalid system call '$1'" -e inject="$2::"
	check_e "invalid system call '$1'" -e inject="$2:::"
	check_e "invalid system call '$1'" -einject="$2:when=3"
	check_e "invalid system call '$1'" --inject="$2:when=3"
	check_e "invalid system call '$1'" -e inject="$2:when=3"

	check_e "invalid system call '$1'" -efault="$2"
	check_e "invalid system call '$1'" --fault="$2"
	check_e "invalid system call '$1'" -e fault="$2"
	check_e "invalid system call '$1'" -efault="$2:"
	check_e "invalid system call '$1'" -efault="$2::"
	check_e "invalid system call '$1'" -efault="$2:::"
	check_e "invalid system call '$1'" --fault="$2:"
	check_e "invalid system call '$1'" --fault="$2::"
	check_e "invalid system call '$1'" --fault="$2:::"
	check_e "invalid system call '$1'" -e fault="$2:"
	check_e "invalid system call '$1'" -e fault="$2::"
	check_e "invalid system call '$1'" -e fault="$2:::"
	check_e "invalid system call '$1'" -efault="$2:when=4"
	check_e "invalid system call '$1'" --fault="$2:when=4"
	check_e "invalid system call '$1'" -e fault="$2:when=4"
}

pers=$(print_current_personality_designator)

for arg in '' , ,, ,,, ; do
	check_syscall "$arg" "$arg"
	check_syscall "!$arg" "!$arg"
done

case "$STRACE_ARCH" in
	alpha)	invalid_scno1=299
		invalid_scno2=404
		;;
	*)	invalid_scno1=415
		invalid_scno2=501
		;;
esac

case "$STRACE_ARCH" in
	ia64)	valid_scno=1025 ;;
	*)	valid_scno=1 ;;
esac

for arg in -1 -2 -3 -4 -5 \
	   invalid_syscall_name \
	   0x 0y \
	   32767 \
	   2147483647 \
	   2147483648 \
	   4294967295 \
	   4294967296 \
	   $invalid_scno1 \
	   $invalid_scno2 \
	   /non_syscall \
	   % %not_a_class \
	   ; do
	check_syscall "$arg" "$arg"
	check_syscall "$arg" "!$arg"
	check_syscall "$arg" "$valid_scno,$arg"
	check_syscall "$arg@$pers" "$arg@$pers"
done

for arg in '!chdir' none; do
	check_syscall "$arg" "$valid_scno,$arg"
done

# invalid syscall, multiple syscalls
for arg in %desc \
	   %file \
	   %memory \
	   %process \
	   %network \
	   chdir \
	   $valid_scno \
	   all \
	   ?32767 \
	   ?invalid \
	   ?%not_a_class \
	   ?/non_syscall \
	   ; do
	for pfx in '' '!'; do
		for token in "$arg" "$arg@$pers"; do
			check_syscall nonsense "${pfx}$token,nonsense"
			check_syscall nonsense "${pfx}nonsense,$token"
		done
	done
done

check_e_using_grep 'regcomp: \+id: [[:alpha:]].+' -e trace='/+id'
check_e_using_grep 'regcomp: \*id: [[:alpha:]].+' -e trace='/*id'
check_e_using_grep 'regcomp: \{id: [[:alpha:]].+' -e trace='/{id'
check_e_using_grep 'regcomp: \(id: [[:alpha:]].+' -e trace='/(id'
check_e_using_grep 'regcomp: \[id: [[:alpha:]].+' -e trace='/[id'