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'
|