|
Packit Service |
8eee21 |
#!/bin/bash
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# libseccomp syscall validation script
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Copyright (c) 2014 Red Hat <pmoore@redhat.com>
|
|
Packit Service |
8eee21 |
# Author: Paul Moore <paul@paul-moore.com>
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# This library is free software; you can redistribute it and/or modify it
|
|
Packit Service |
8eee21 |
# under the terms of version 2.1 of the GNU Lesser General Public License as
|
|
Packit Service |
8eee21 |
# published by the Free Software Foundation.
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# This library is distributed in the hope that it will be useful, but WITHOUT
|
|
Packit Service |
8eee21 |
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
Packit Service |
8eee21 |
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
|
Packit Service |
8eee21 |
# for more details.
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# You should have received a copy of the GNU Lesser General Public License
|
|
Packit Service |
8eee21 |
# along with this library; if not, see <http://www.gnu.org/licenses>.
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
LIB_SYS_DUMP="./arch-syscall-dump"
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
####
|
|
Packit Service |
8eee21 |
# functions
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dependency check
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Arguments:
|
|
Packit Service |
8eee21 |
# 1 Dependency to check for
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
function check_deps() {
|
|
Packit Service |
8eee21 |
[[ -z "$1" ]] && return
|
|
Packit Service |
8eee21 |
which "$1" >& /dev/null
|
|
Packit Service |
8eee21 |
return $?
|
|
Packit Service |
8eee21 |
}
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dependency verification
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Arguments:
|
|
Packit Service |
8eee21 |
# 1 Dependency to check for
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
function verify_deps() {
|
|
Packit Service |
8eee21 |
[[ -z "$1" ]] && return
|
|
Packit Service |
8eee21 |
if ! check_deps "$1"; then
|
|
Packit Service |
8eee21 |
echo "error: install \"$1\" and include it in your \$PATH"
|
|
Packit Service |
8eee21 |
exit 1
|
|
Packit Service |
8eee21 |
fi
|
|
Packit Service |
8eee21 |
}
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Print out script usage details
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
function usage() {
|
|
Packit Service |
8eee21 |
cat << EOF
|
|
Packit Service |
8eee21 |
usage: arch-syscall-validate [-h] [-a <arch>] <kernel_directory>
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
libseccomp syscall validation script
|
|
Packit Service |
8eee21 |
optional arguments:
|
|
Packit Service |
8eee21 |
-h show this help message and exit
|
|
Packit Service |
8eee21 |
-a architecture
|
|
Packit Service |
8eee21 |
-l output the library's syscall definitions
|
|
Packit Service |
8eee21 |
-s output the system's syscall definitions
|
|
Packit Service |
8eee21 |
EOF
|
|
Packit Service |
8eee21 |
}
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the library syscall table for a given architecture
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Arguments:
|
|
Packit Service |
8eee21 |
# 1 architecture
|
|
Packit Service |
8eee21 |
# 2 offset (optional)
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the library's syscall table to stdout.
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
function dump_lib_arch() {
|
|
Packit Service |
8eee21 |
local offset_str=""
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
[[ -z $1 ]] && return
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
[[ -n $2 ]] && offset_str="-o $2"
|
|
Packit Service |
8eee21 |
$LIB_SYS_DUMP -a $1 $offset_str | sed -e '/[^\t]\+\t-[0-9]\+/d' | sort
|
|
Packit Service |
8eee21 |
}
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the x86 system syscall table
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Arguments:
|
|
Packit Service |
8eee21 |
# 1 path to the kernel source
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the architecture's syscall table to stdout.
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
function dump_sys_x86() {
|
|
Packit Service |
8eee21 |
cat $1/arch/x86/entry/syscalls/syscall_32.tbl | \
|
|
Packit Service |
8eee21 |
grep -v "^#" | awk '{ print $3"\t"$1 }' | sed '/^[ \t]*$/d' | \
|
|
Packit Service |
8eee21 |
sort
|
|
Packit Service |
8eee21 |
}
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the x86 library syscall table
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the library's syscall table to stdout.
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
function dump_lib_x86() {
|
|
Packit Service |
8eee21 |
dump_lib_arch x86
|
|
Packit Service |
8eee21 |
}
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the x86_64 system syscall table
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Arguments:
|
|
Packit Service |
8eee21 |
# 1 path to the kernel source
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the architecture's syscall table to stdout.
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
function dump_sys_x86_64() {
|
|
Packit Service |
8eee21 |
cat $1/arch/x86/entry/syscalls/syscall_64.tbl | \
|
|
Packit Service |
8eee21 |
grep -v "^#" | awk '{ print $2,$3,$1 }' | sed -e '/^x32/d' | \
|
|
Packit Service |
8eee21 |
awk '{ print $2"\t"$3 }' | sed '/^[ \t]*$/d' | sort
|
|
Packit Service |
8eee21 |
}
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the x86_64 library syscall table
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the library's syscall table to stdout.
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
function dump_lib_x86_64() {
|
|
Packit Service |
8eee21 |
dump_lib_arch x86_64
|
|
Packit Service |
8eee21 |
}
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the x32 system syscall table
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Arguments:
|
|
Packit Service |
8eee21 |
# 1 path to the kernel source
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the architecture's syscall table to stdout.
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
function dump_sys_x32() {
|
|
Packit Service |
8eee21 |
cat $1/arch/x86/entry/syscalls/syscall_64.tbl | \
|
|
Packit Service |
8eee21 |
grep -v "^#" | awk '{ print $2,$3,$1 }' | sed -e '/^64/d' | \
|
|
Packit Service |
8eee21 |
awk '{ print $2"\t"$3 }' | sed '/^[ \t]*$/d' | sort
|
|
Packit Service |
8eee21 |
}
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the x32 library syscall table
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the library's syscall table to stdout.
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
function dump_lib_x32() {
|
|
Packit Service |
8eee21 |
# 1073741824 == 0x40000000
|
|
Packit Service |
8eee21 |
dump_lib_arch x32 1073741824
|
|
Packit Service |
8eee21 |
}
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the arm system syscall table
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Arguments:
|
|
Packit Service |
8eee21 |
# 1 path to the kernel source
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the architecture's syscall table to stdout.
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
function dump_sys_arm() {
|
|
Packit Service |
8eee21 |
cat $1/arch/arm/tools/syscall.tbl | grep -v "^#" | \
|
|
Packit Service |
8eee21 |
sed -ne "/[0-9]\+[ \t]\+\(common\|eabi\)/p" | \
|
|
Packit Service |
8eee21 |
awk '{ print $3"\t"$1 }' | sort | (cat -; \
|
|
Packit Service |
8eee21 |
(cat $1/arch/arm/include/uapi/asm/unistd.h | \
|
|
Packit Service |
8eee21 |
grep "^#define __ARM_NR_" | grep -v "^#define __ARM_NR_BASE" | \
|
|
Packit Service |
8eee21 |
sed -e 's/#define __ARM_NR_\([a-z0-9_]*\)[ \t]\+(__ARM_NR_BASE+\(.*\))/\1 983040 + \2/' | \
|
|
Packit Service |
8eee21 |
awk '{ print $1"\t"$2+$4 }')) | sort
|
|
Packit Service |
8eee21 |
}
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the arm library syscall table
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the library's syscall table to stdout.
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
function dump_lib_arm() {
|
|
Packit Service |
8eee21 |
# NOTE: arm_sync_file_range() and sync_file_range2() share values
|
|
Packit Service |
8eee21 |
dump_lib_arch arm | sed -e '/sync_file_range2[ \t]\+341/d'
|
|
Packit Service |
8eee21 |
}
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the aarch64 system syscall table
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Arguments:
|
|
Packit Service |
8eee21 |
# 1 path to the kernel source
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the architecture's syscall table to stdout.
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
function dump_sys_aarch64() {
|
|
Packit Service |
8eee21 |
gcc -E -dM -I$1/include/uapi \
|
|
Packit Service |
8eee21 |
-D__BITS_PER_LONG=64 -D__ARCH_WANT_RENAMEAT \
|
|
Packit Service |
8eee21 |
-D__ARCH_WANT_NEW_STAT \
|
|
Packit Service |
8eee21 |
$1/include/uapi/asm-generic/unistd.h | \
|
|
Packit Service |
8eee21 |
grep "^#define __NR_" | \
|
|
Packit Service |
8eee21 |
sed -e '/__NR_syscalls/d' | \
|
|
Packit Service |
8eee21 |
sed -e '/__NR_arch_specific_syscall/d' | \
|
|
Packit Service |
8eee21 |
sed -e 's/#define[ \t]\+__NR_\([^ \t]\+\)[ \t]\+\(.*\)/\1\t\2/' | \
|
|
Packit Service |
8eee21 |
sed -e 's/__NR3264_statfs/43/' | \
|
|
Packit Service |
8eee21 |
sed -e 's/__NR3264_ftruncate/46/' | \
|
|
Packit Service |
8eee21 |
sed -e 's/__NR3264_truncate/45/' | \
|
|
Packit Service |
8eee21 |
sed -e 's/__NR3264_lseek/62/' | \
|
|
Packit Service |
8eee21 |
sed -e 's/__NR3264_sendfile/71/' | \
|
|
Packit Service |
8eee21 |
sed -e 's/__NR3264_fstatat/79/' | \
|
|
Packit Service |
8eee21 |
sed -e 's/__NR3264_fstatfs/44/' | \
|
|
Packit Service |
8eee21 |
sed -e 's/__NR3264_fcntl/25/' | \
|
|
Packit Service |
8eee21 |
sed -e 's/__NR3264_fadvise64/223/' | \
|
|
Packit Service |
8eee21 |
sed -e 's/__NR3264_mmap/222/' | \
|
|
Packit Service |
8eee21 |
sed -e 's/__NR3264_fstat/80/' | \
|
|
Packit Service |
8eee21 |
sed -e 's/__NR3264_lstat/1039/' | \
|
|
Packit Service |
8eee21 |
sed -e 's/__NR3264_stat/1038/' | \
|
|
Packit Service |
8eee21 |
sort
|
|
Packit Service |
8eee21 |
}
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the aarch64 library syscall table
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the library's syscall table to stdout.
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
function dump_lib_aarch64() {
|
|
Packit Service |
8eee21 |
dump_lib_arch aarch64
|
|
Packit Service |
8eee21 |
}
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the mips system syscall table
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Arguments:
|
|
Packit Service |
8eee21 |
# 1 path to the kernel source
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the architecture's syscall table to stdout.
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
function dump_sys_mips() {
|
|
Packit Service |
8eee21 |
pushd $1 2>&1 > /dev/null
|
|
Packit Service |
8eee21 |
make ARCH=mips archheaders
|
|
Packit Service |
8eee21 |
popd 2>&1 > /dev/null
|
|
Packit Service |
8eee21 |
# _MIPS_SIM values:
|
|
Packit Service |
8eee21 |
# _MIPS_SIM_ABI32 == 1
|
|
Packit Service |
8eee21 |
# _MIPS_SIM_NABI32 == 2
|
|
Packit Service |
8eee21 |
# _MIPS_SIM_ABI64 == 3
|
|
Packit Service |
8eee21 |
gcc -E -dM -I$1/arch/mips/include/uapi -I$1/arch/mips/include/generated/uapi -D_MIPS_SIM=1 $1/arch/mips/include/uapi/asm/unistd.h | \
|
|
Packit Service |
8eee21 |
grep "^#define __NR_" | \
|
|
Packit Service |
8eee21 |
grep -v "^#define __NR_O32_" | \
|
|
Packit Service |
8eee21 |
grep -v "^#define __NR_N32_" | \
|
|
Packit Service |
8eee21 |
grep -v "^#define __NR_64_" | \
|
|
Packit Service |
8eee21 |
grep -v "^#define __NR_Linux" | \
|
|
Packit Service |
8eee21 |
grep -v "^#define __NR_unused" | \
|
|
Packit Service |
8eee21 |
grep -v "^#define __NR_reserved" | \
|
|
Packit Service |
8eee21 |
sed -e 's/#define[ \t]\+__NR_\([^ \t]\+\)[ \t]\+(__NR_Linux[ \t]*+[ \t]*\([0-9]\+\)).*/\1\t\2/' | \
|
|
Packit Service |
8eee21 |
sort
|
|
Packit Service |
8eee21 |
}
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the mips library syscall table
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the library's syscall table to stdout.
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
function dump_lib_mips() {
|
|
Packit Service |
8eee21 |
dump_lib_arch mips 4000
|
|
Packit Service |
8eee21 |
}
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the mips64 system syscall table
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Arguments:
|
|
Packit Service |
8eee21 |
# 1 path to the kernel source
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the architecture's syscall table to stdout.
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
function dump_sys_mips64() {
|
|
Packit Service |
8eee21 |
pushd $1 2>&1 > /dev/null
|
|
Packit Service |
8eee21 |
make ARCH=mips archheaders
|
|
Packit Service |
8eee21 |
popd 2>&1 > /dev/null
|
|
Packit Service |
8eee21 |
# _MIPS_SIM values:
|
|
Packit Service |
8eee21 |
# _MIPS_SIM_ABI32 == 1
|
|
Packit Service |
8eee21 |
# _MIPS_SIM_NABI32 == 2
|
|
Packit Service |
8eee21 |
# _MIPS_SIM_ABI64 == 3
|
|
Packit Service |
8eee21 |
gcc -E -dM -I$1/arch/mips/include/uapi -I$1/arch/mips/include/generated/uapi -D_MIPS_SIM=3 $1/arch/mips/include/uapi/asm/unistd.h | \
|
|
Packit Service |
8eee21 |
grep "^#define __NR_" | \
|
|
Packit Service |
8eee21 |
grep -v "^#define __NR_O32_" | \
|
|
Packit Service |
8eee21 |
grep -v "^#define __NR_N32_" | \
|
|
Packit Service |
8eee21 |
grep -v "^#define __NR_64_" | \
|
|
Packit Service |
8eee21 |
grep -v "^#define __NR_Linux" | \
|
|
Packit Service |
8eee21 |
grep -v "^#define __NR_unused" | \
|
|
Packit Service |
8eee21 |
grep -v "^#define __NR_reserved" | \
|
|
Packit Service |
8eee21 |
sed -e 's/#define[ \t]\+__NR_\([^ \t]\+\)[ \t]\+(__NR_Linux[ \t]*+[ \t]*\([0-9]\+\)).*/\1\t\2/' | \
|
|
Packit Service |
8eee21 |
sort
|
|
Packit Service |
8eee21 |
}
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the mips64 library syscall table
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the library's syscall table to stdout.
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
function dump_lib_mips64() {
|
|
Packit Service |
8eee21 |
dump_lib_arch mips64 5000
|
|
Packit Service |
8eee21 |
}
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the mips64n32 system syscall table
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Arguments:
|
|
Packit Service |
8eee21 |
# 1 path to the kernel source
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the architecture's syscall table to stdout.
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
function dump_sys_mips64n32() {
|
|
Packit Service |
8eee21 |
pushd $1 2>&1 > /dev/null
|
|
Packit Service |
8eee21 |
make ARCH=mips archheaders
|
|
Packit Service |
8eee21 |
popd 2>&1 > /dev/null
|
|
Packit Service |
8eee21 |
# _MIPS_SIM values:
|
|
Packit Service |
8eee21 |
# _MIPS_SIM_ABI32 == 1
|
|
Packit Service |
8eee21 |
# _MIPS_SIM_NABI32 == 2
|
|
Packit Service |
8eee21 |
# _MIPS_SIM_ABI64 == 3
|
|
Packit Service |
8eee21 |
gcc -E -dM -I$1/arch/mips/include/uapi -I$1/arch/mips/include/generated/uapi -D_MIPS_SIM=2 $1/arch/mips/include/uapi/asm/unistd.h | \
|
|
Packit Service |
8eee21 |
grep "^#define __NR_" | \
|
|
Packit Service |
8eee21 |
grep -v "^#define __NR_O32_" | \
|
|
Packit Service |
8eee21 |
grep -v "^#define __NR_N32_" | \
|
|
Packit Service |
8eee21 |
grep -v "^#define __NR_64_" | \
|
|
Packit Service |
8eee21 |
grep -v "^#define __NR_Linux" | \
|
|
Packit Service |
8eee21 |
grep -v "^#define __NR_unused" | \
|
|
Packit Service |
8eee21 |
grep -v "^#define __NR_reserved" | \
|
|
Packit Service |
8eee21 |
sed -e 's/#define[ \t]\+__NR_\([^ \t]\+\)[ \t]\+(__NR_Linux[ \t]*+[ \t]*\([0-9]\+\)).*/\1\t\2/' | \
|
|
Packit Service |
8eee21 |
sort
|
|
Packit Service |
8eee21 |
}
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the mips64n32 library syscall table
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the library's syscall table to stdout.
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
function dump_lib_mips64n32() {
|
|
Packit Service |
8eee21 |
dump_lib_arch mips64n32 6000
|
|
Packit Service |
8eee21 |
}
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the ppc system syscall table
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Arguments:
|
|
Packit Service |
8eee21 |
# 1 path to the kernel source
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the architecture's syscall table to stdout.
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
function dump_sys_ppc() {
|
|
Packit Service |
8eee21 |
cat $1/arch/powerpc/kernel/syscalls/syscall.tbl | grep -v "^#" | \
|
|
Packit Service |
8eee21 |
sed -ne "/[0-9]\+[ \t]\+\(common\|nospu\|32\)/p" | \
|
|
Packit Service |
8eee21 |
awk '{ print $3"\t"$1 }' | sort | (cat -; \
|
|
Packit Service |
8eee21 |
(cat $1/arch/powerpc/include/uapi/asm/unistd.h | \
|
|
Packit Service |
8eee21 |
grep "^#define __PPC_NR_" | grep -v "^#define __PPC_NR_BASE" | \
|
|
Packit Service |
8eee21 |
sed -e 's/#define _PPC_NR_\([a-z0-9_]*\)[ \t]\+(__PPC_NR_BASE+\(.*\))/\1 983040 + \2/' | \
|
|
Packit Service |
8eee21 |
awk '{ print $1"\t"$2+$4 }')) | sort
|
|
Packit Service |
8eee21 |
}
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the ppc library syscall table
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the library's syscall table to stdout.
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
function dump_lib_ppc() {
|
|
Packit Service |
8eee21 |
dump_lib_arch ppc
|
|
Packit Service |
8eee21 |
}
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the ppc64 system syscall table
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Arguments:
|
|
Packit Service |
8eee21 |
# 1 path to the kernel source
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the architecture's syscall table to stdout.
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
function dump_sys_ppc64() {
|
|
Packit Service |
8eee21 |
cat $1/arch/powerpc/kernel/syscalls/syscall.tbl | grep -v "^#" | \
|
|
Packit Service |
8eee21 |
sed -ne "/[0-9]\+[ \t]\+\(common\|nospu\|64\)/p" | \
|
|
Packit Service |
8eee21 |
awk '{ print $3"\t"$1 }' | sort | (cat -; \
|
|
Packit Service |
8eee21 |
(cat $1/arch/powerpc/include/uapi/asm/unistd.h | \
|
|
Packit Service |
8eee21 |
grep "^#define __PPC_NR_" | grep -v "^#define __PPC_NR_BASE" | \
|
|
Packit Service |
8eee21 |
sed -e 's/#define _PPC_NR_\([a-z0-9_]*\)[ \t]\+(__PPC_NR_BASE+\(.*\))/\1 983040 + \2/' | \
|
|
Packit Service |
8eee21 |
awk '{ print $1"\t"$2+$4 }')) | sort
|
|
Packit Service |
8eee21 |
}
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the ppc64 library syscall table
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the library's syscall table to stdout.
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
function dump_lib_ppc64() {
|
|
Packit Service |
8eee21 |
dump_lib_arch ppc64
|
|
Packit Service |
8eee21 |
}
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the s390 system syscall table
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Arguments:
|
|
Packit Service |
8eee21 |
# 1 path to the kernel source
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the architecture's syscall table to stdout.
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
function dump_sys_s390() {
|
|
Packit Service |
8eee21 |
cat $1/arch/s390/kernel/syscalls/syscall.tbl | grep -v "^#" | \
|
|
Packit Service |
8eee21 |
sed -ne "/[0-9]\+[ \t]\+\(common\|32\)/p" | \
|
|
Packit Service |
8eee21 |
awk '{ print $3"\t"$1 }' | sort | (cat -; \
|
|
Packit Service |
8eee21 |
(cat $1/arch/s390/include/uapi/asm/unistd.h | \
|
|
Packit Service |
8eee21 |
grep "^#define __PPC_NR_" | grep -v "^#define __PPC_NR_BASE" | \
|
|
Packit Service |
8eee21 |
sed -e 's/#define _PPC_NR_\([a-z0-9_]*\)[ \t]\+(__PPC_NR_BASE+\(.*\))/\1 983040 + \2/' | \
|
|
Packit Service |
8eee21 |
awk '{ print $1"\t"$2+$4 }')) | sort
|
|
Packit Service |
8eee21 |
}
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the s390 library syscall table
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the library's syscall table to stdout.
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
function dump_lib_s390() {
|
|
Packit Service |
8eee21 |
dump_lib_arch s390
|
|
Packit Service |
8eee21 |
}
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the s390x system syscall table
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Arguments:
|
|
Packit Service |
8eee21 |
# 1 path to the kernel source
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the architecture's syscall table to stdout.
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
function dump_sys_s390x() {
|
|
Packit Service |
8eee21 |
cat $1/arch/s390/kernel/syscalls/syscall.tbl | grep -v "^#" | \
|
|
Packit Service |
8eee21 |
sed -ne "/[0-9]\+[ \t]\+\(common\|64\)/p" | \
|
|
Packit Service |
8eee21 |
awk '{ print $3"\t"$1 }' | sort | (cat -; \
|
|
Packit Service |
8eee21 |
(cat $1/arch/s390/include/uapi/asm/unistd.h | \
|
|
Packit Service |
8eee21 |
grep "^#define __PPC_NR_" | grep -v "^#define __PPC_NR_BASE" | \
|
|
Packit Service |
8eee21 |
sed -e 's/#define _PPC_NR_\([a-z0-9_]*\)[ \t]\+(__PPC_NR_BASE+\(.*\))/\1 983040 + \2/' | \
|
|
Packit Service |
8eee21 |
awk '{ print $1"\t"$2+$4 }')) | sort
|
|
Packit Service |
8eee21 |
}
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the s390x library syscall table
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the library's syscall table to stdout.
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
function dump_lib_s390x() {
|
|
Packit Service |
8eee21 |
dump_lib_arch s390x
|
|
Packit Service |
8eee21 |
}
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the system syscall table
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Arguments:
|
|
Packit Service |
8eee21 |
# 1 architecture
|
|
Packit Service |
8eee21 |
# 2 path to the kernel source
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the system's syscall table to stdout using the given architecture.
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
function dump_sys() {
|
|
Packit Service |
8eee21 |
case $1 in
|
|
Packit Service |
8eee21 |
x86)
|
|
Packit Service |
8eee21 |
dump_sys_x86 "$2"
|
|
Packit Service |
8eee21 |
;;
|
|
Packit Service |
8eee21 |
x86_64)
|
|
Packit Service |
8eee21 |
dump_sys_x86_64 "$2"
|
|
Packit Service |
8eee21 |
;;
|
|
Packit Service |
8eee21 |
x32)
|
|
Packit Service |
8eee21 |
dump_sys_x32 "$2"
|
|
Packit Service |
8eee21 |
;;
|
|
Packit Service |
8eee21 |
arm)
|
|
Packit Service |
8eee21 |
dump_sys_arm "$2"
|
|
Packit Service |
8eee21 |
;;
|
|
Packit Service |
8eee21 |
aarch64)
|
|
Packit Service |
8eee21 |
dump_sys_aarch64 "$2"
|
|
Packit Service |
8eee21 |
;;
|
|
Packit Service |
8eee21 |
mips)
|
|
Packit Service |
8eee21 |
dump_sys_mips "$2"
|
|
Packit Service |
8eee21 |
;;
|
|
Packit Service |
8eee21 |
mips64)
|
|
Packit Service |
8eee21 |
dump_sys_mips64 "$2"
|
|
Packit Service |
8eee21 |
;;
|
|
Packit Service |
8eee21 |
mips64n32)
|
|
Packit Service |
8eee21 |
dump_sys_mips64n32 "$2"
|
|
Packit Service |
8eee21 |
;;
|
|
Packit Service |
8eee21 |
ppc)
|
|
Packit Service |
8eee21 |
dump_sys_ppc "$2"
|
|
Packit Service |
8eee21 |
;;
|
|
Packit Service |
8eee21 |
ppc64)
|
|
Packit Service |
8eee21 |
dump_sys_ppc64 "$2"
|
|
Packit Service |
8eee21 |
;;
|
|
Packit Service |
8eee21 |
s390)
|
|
Packit Service |
8eee21 |
dump_sys_s390 "$2"
|
|
Packit Service |
8eee21 |
;;
|
|
Packit Service |
8eee21 |
s390x)
|
|
Packit Service |
8eee21 |
dump_sys_s390x "$2"
|
|
Packit Service |
8eee21 |
;;
|
|
Packit Service |
8eee21 |
*)
|
|
Packit Service |
8eee21 |
echo ""
|
|
Packit Service |
8eee21 |
return 1
|
|
Packit Service |
8eee21 |
;;
|
|
Packit Service |
8eee21 |
esac
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
return 0
|
|
Packit Service |
8eee21 |
}
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the library syscall table
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Arguments:
|
|
Packit Service |
8eee21 |
# 1 architecture
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
# Dump the library's syscall table to stdout using the given architecture.
|
|
Packit Service |
8eee21 |
#
|
|
Packit Service |
8eee21 |
function dump_lib() {
|
|
Packit Service |
8eee21 |
case $1 in
|
|
Packit Service |
8eee21 |
x86)
|
|
Packit Service |
8eee21 |
dump_lib_x86
|
|
Packit Service |
8eee21 |
;;
|
|
Packit Service |
8eee21 |
x86_64)
|
|
Packit Service |
8eee21 |
dump_lib_x86_64
|
|
Packit Service |
8eee21 |
;;
|
|
Packit Service |
8eee21 |
x32)
|
|
Packit Service |
8eee21 |
dump_lib_x32
|
|
Packit Service |
8eee21 |
;;
|
|
Packit Service |
8eee21 |
arm)
|
|
Packit Service |
8eee21 |
dump_lib_arm
|
|
Packit Service |
8eee21 |
;;
|
|
Packit Service |
8eee21 |
aarch64)
|
|
Packit Service |
8eee21 |
dump_lib_aarch64
|
|
Packit Service |
8eee21 |
;;
|
|
Packit Service |
8eee21 |
mips)
|
|
Packit Service |
8eee21 |
dump_lib_mips
|
|
Packit Service |
8eee21 |
;;
|
|
Packit Service |
8eee21 |
mips64)
|
|
Packit Service |
8eee21 |
dump_lib_mips64
|
|
Packit Service |
8eee21 |
;;
|
|
Packit Service |
8eee21 |
mips64n32)
|
|
Packit Service |
8eee21 |
dump_lib_mips64n32
|
|
Packit Service |
8eee21 |
;;
|
|
Packit Service |
8eee21 |
ppc)
|
|
Packit Service |
8eee21 |
dump_lib_ppc "$2"
|
|
Packit Service |
8eee21 |
;;
|
|
Packit Service |
8eee21 |
ppc64)
|
|
Packit Service |
8eee21 |
dump_lib_ppc64 "$2"
|
|
Packit Service |
8eee21 |
;;
|
|
Packit Service |
8eee21 |
s390)
|
|
Packit Service |
8eee21 |
dump_lib_s390 "$2"
|
|
Packit Service |
8eee21 |
;;
|
|
Packit Service |
8eee21 |
s390x)
|
|
Packit Service |
8eee21 |
dump_lib_s390x "$2"
|
|
Packit Service |
8eee21 |
;;
|
|
Packit Service |
8eee21 |
*)
|
|
Packit Service |
8eee21 |
echo ""
|
|
Packit Service |
8eee21 |
return 1
|
|
Packit Service |
8eee21 |
;;
|
|
Packit Service |
8eee21 |
esac
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
return 0
|
|
Packit Service |
8eee21 |
}
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
####
|
|
Packit Service |
8eee21 |
# main
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
verify_deps diff
|
|
Packit Service |
8eee21 |
verify_deps gcc
|
|
Packit Service |
8eee21 |
verify_deps grep
|
|
Packit Service |
8eee21 |
verify_deps mktemp
|
|
Packit Service |
8eee21 |
verify_deps sed
|
|
Packit Service |
8eee21 |
if [[ ! -x $LIB_SYS_DUMP ]]; then
|
|
Packit Service |
8eee21 |
echo "error: \"$LIB_SYS_DUMP\" is not in the current working directory"
|
|
Packit Service |
8eee21 |
exit 1
|
|
Packit Service |
8eee21 |
fi
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
opt_arches=""
|
|
Packit Service |
8eee21 |
opt_sys=""
|
|
Packit Service |
8eee21 |
opt_lib=""
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
while getopts "a:slh" opt; do
|
|
Packit Service |
8eee21 |
case $opt in
|
|
Packit Service |
8eee21 |
a)
|
|
Packit Service |
8eee21 |
opt_arches+="$OPTARG "
|
|
Packit Service |
8eee21 |
;;
|
|
Packit Service |
8eee21 |
s)
|
|
Packit Service |
8eee21 |
opt_sys=1
|
|
Packit Service |
8eee21 |
opt_lib=0
|
|
Packit Service |
8eee21 |
;;
|
|
Packit Service |
8eee21 |
l)
|
|
Packit Service |
8eee21 |
opt_sys=0
|
|
Packit Service |
8eee21 |
opt_lib=1
|
|
Packit Service |
8eee21 |
;;
|
|
Packit Service |
8eee21 |
h|*)
|
|
Packit Service |
8eee21 |
usage
|
|
Packit Service |
8eee21 |
exit 1
|
|
Packit Service |
8eee21 |
;;
|
|
Packit Service |
8eee21 |
esac
|
|
Packit Service |
8eee21 |
done
|
|
Packit Service |
8eee21 |
shift $(($OPTIND - 1))
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
# defaults
|
|
Packit Service |
8eee21 |
if [[ $opt_arches == "" ]]; then
|
|
Packit Service |
8eee21 |
opt_arches=" \
|
|
Packit Service |
8eee21 |
x86 x86_64 x32 \
|
|
Packit Service |
8eee21 |
arm aarch64 \
|
|
Packit Service |
8eee21 |
mips mips64 mips64n32 \
|
|
Packit Service |
8eee21 |
ppc ppc64 \
|
|
Packit Service |
8eee21 |
s390 s390x"
|
|
Packit Service |
8eee21 |
fi
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
# sanity checks
|
|
Packit Service |
8eee21 |
kernel_dir="$1"
|
|
Packit Service |
8eee21 |
if [[ -z $kernel_dir ]]; then
|
|
Packit Service |
8eee21 |
usage
|
|
Packit Service |
8eee21 |
exit 1
|
|
Packit Service |
8eee21 |
fi
|
|
Packit Service |
8eee21 |
if [[ ! -d $kernel_dir ]]; then
|
|
Packit Service |
8eee21 |
echo "error: \"$1\" is not a valid directory"
|
|
Packit Service |
8eee21 |
exit 1
|
|
Packit Service |
8eee21 |
fi
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
# generate some temp files
|
|
Packit Service |
8eee21 |
tmp_lib=$(mktemp -t syscall_validate_XXXXXX)
|
|
Packit Service |
8eee21 |
tmp_sys=$(mktemp -t syscall_validate_XXXXXX)
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
# loop through the architectures and compare
|
|
Packit Service |
8eee21 |
for i in $opt_arches; do
|
|
Packit Service |
8eee21 |
# dump the syscall tables
|
|
Packit Service |
8eee21 |
dump_lib $i > $tmp_lib
|
|
Packit Service |
8eee21 |
if [[ $? -ne 0 ]]; then
|
|
Packit Service |
8eee21 |
echo "error: unknown arch $i"
|
|
Packit Service |
8eee21 |
exit 1
|
|
Packit Service |
8eee21 |
fi
|
|
Packit Service |
8eee21 |
dump_sys $i "$kernel_dir" > $tmp_sys
|
|
Packit Service |
8eee21 |
if [[ $? -ne 0 ]]; then
|
|
Packit Service |
8eee21 |
echo "error: unknown arch $i"
|
|
Packit Service |
8eee21 |
exit 1
|
|
Packit Service |
8eee21 |
fi
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
if [[ $opt_lib -eq 1 ]]; then
|
|
Packit Service |
8eee21 |
cat $tmp_lib
|
|
Packit Service |
8eee21 |
elif [[ $opt_sys -eq 1 ]]; then
|
|
Packit Service |
8eee21 |
cat $tmp_sys
|
|
Packit Service |
8eee21 |
else
|
|
Packit Service |
8eee21 |
# compare the lib and sys output
|
|
Packit Service |
8eee21 |
diff -u --label="$i [library]" $tmp_lib \
|
|
Packit Service |
8eee21 |
--label "$i [system]" $tmp_sys
|
|
Packit Service |
8eee21 |
fi
|
|
Packit Service |
8eee21 |
done
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
# cleanup and exit
|
|
Packit Service |
8eee21 |
rm -f $tmp_lib $tmp_sys
|
|
Packit Service |
8eee21 |
|
|
Packit Service |
8eee21 |
exit 0
|