diff options
Diffstat (limited to 'tests-mx32/filtering_syscall-syntax.test')
-rwxr-xr-x | tests-mx32/filtering_syscall-syntax.test | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/tests-mx32/filtering_syscall-syntax.test b/tests-mx32/filtering_syscall-syntax.test new file mode 100755 index 00000000..8fda8dc2 --- /dev/null +++ b/tests-mx32/filtering_syscall-syntax.test @@ -0,0 +1,121 @@ +#!/bin/sh +# +# Check syscall set parsing syntax. +# +# Copyright (c) 2016-2018 Dmitry V. Levin <ldv@altlinux.org> +# Copyright (c) 2017 Nikolay Marchuk <marchuk.nikolay.a@gmail.com> +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +. "${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'" -e trace="$2" + + check_e "invalid system call '$1'" -eabbrev="$2" + check_e "invalid system call '$1'" -e abbrev="$2" + + check_e "invalid system call '$1'" -everbose="$2" + check_e "invalid system call '$1'" -e verbose="$2" + + check_e "invalid system call '$1'" -eraw="$2" + check_e "invalid system call '$1'" -e raw="$2" + + check_e "invalid system call '$1'" -einject="$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'" -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'" -e inject="$2:when=3" + + check_e "invalid system call '$1'" -efault="$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'" -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'" -e fault="$2:when=4" +} + +for arg in '' , ,, ,,, ; do + check_syscall "$arg" "$arg" + check_syscall "!$arg" "!$arg" +done + +for arg in -1 -2 -3 -4 -5 \ + invalid_syscall_name \ + 0x 0y \ + 32767 \ + 2147483647 \ + 2147483648 \ + 4294967295 \ + 4294967296 \ + /non_syscall \ + % %not_a_class \ + ; do + check_syscall "$arg" "$arg" + check_syscall "$arg" "!$arg" + check_syscall "$arg" "1,$arg" +done + +for arg in '!chdir' none all; do + check_syscall "$arg" "1,$arg" +done + +# invalid syscall, multiple syscalls +for arg in %desc \ + %file \ + %memory \ + %process \ + %network \ + chdir \ + 1 \ + ?32767 \ + ?invalid \ + ?%not_a_class \ + ?/non_syscall \ + ; do + check_syscall nonsense "$arg,nonsense" + check_syscall nonsense "!$arg,nonsense" + check_syscall nonsense "nonsense,$arg" + check_syscall nonsense "!nonsense,$arg" +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' |