| #!/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' |