#!/bin/sh # # Check syscall set parsing syntax. # # Copyright (c) 2016-2018 Dmitry V. Levin # Copyright (c) 2017 Nikolay Marchuk # 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'