Re: [PATCH] libseccomp: Add parisc architecture support (v3)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Paul,

On 15.04.2016 17:11, Helge Deller wrote:
> This patch (v3) adds support for the parisc and parisc64 architectures
> to libseccomp.

Linux kernel 4.5.2-1 with full seccomp support for parisc/hppa is
now publically available in debian:
https://buildd.debian.org/status/package.php?p=linux&suite=sid

Any chance to get this patch (v3) applied to the libseccomp git tree now ?

Thanks,
Helge

> I didn't split up the patch, because it's pretty trivial.
> Those parisc-specific files gets added:
>  src/arch-parisc-syscalls.c
>  src/arch-parisc.c
>  src/arch-parisc.h
>  src/arch-parisc64.c
> 
> All other changes are trivial because they simply add parisc-specific
> case statements in variouse switch statements.
> 
> I did ran a "make check" on parisc and all testcases suceeded.
> All live testcases succeed as well when running "./regression -T live".
> 
> The patch applies cleanly to current libseccomp git head.
> 
> Changes between v2 and v1 of this patch:
> - Enabled seccomp mode 2 regression tests on parisc. Kernel support for hppa
>   was added in kernel 4.6-rc1 and backported into the kernel v4.5.2 stable
>   series.
> 
> Changes between v3 and v2 of this patch:
> - Stipped out patch which reports if a check was skipped because valgrind
>   isn't installed.
> - Added tuxcall pseudo syscall for 19-sim-missing_syscalls testcase
> - Added sysmips pseudo syscall for 29-sim-pseudo_syscall testcase
> 
> Thanks,
> Helge
> 
> Signed-off-by: Helge Deller <deller@xxxxxx>
> 
> diffstat:
>  include/seccomp.h.in              |    6 
>  src/Makefile.am                   |    2 
>  src/arch-parisc-syscalls.c        |  424 ++++++++++++++++++++++++++++++++++++++
>  src/arch-parisc.c                 |   22 +
>  src/arch-parisc.h                 |   38 +++
>  src/arch-parisc64.c               |   22 +
>  src/arch-syscall-dump.c           |    5 
>  src/arch.c                        |   13 +
>  src/gen_pfc.c                     |    4 
>  src/python/libseccomp.pxd         |    2 
>  src/python/seccomp.pyx            |    8 
>  tests/26-sim-arch_all_be_basic.c  |    6 
>  tests/26-sim-arch_all_be_basic.py |    2 
>  tests/regression                  |    3 
>  tools/scmp_arch_detect.c          |    6 
>  tools/scmp_bpf_sim.c              |    4 
>  tools/util.c                      |    4 
>  17 files changed, 570 insertions(+), 1 deletion(-)
> 
> diff --git a/include/seccomp.h.in b/include/seccomp.h.in
> index 6bf6751..5b9057f 100644
> --- a/include/seccomp.h.in
> +++ b/include/seccomp.h.in
> @@ -185,6 +185,12 @@ struct scmp_arg_cmp {
>  #define SCMP_ARCH_S390X		AUDIT_ARCH_S390X
>  
>  /**
> + * The PA-RISC hppa architecture tokens
> + */
> +#define SCMP_ARCH_PARISC	AUDIT_ARCH_PARISC
> +#define SCMP_ARCH_PARISC64	AUDIT_ARCH_PARISC64
> +
> +/**
>   * Convert a syscall name into the associated syscall number
>   * @param x the syscall name
>   */
> diff --git a/src/Makefile.am b/src/Makefile.am
> index c2d805e..dcc79d9 100644
> --- a/src/Makefile.am
> +++ b/src/Makefile.am
> @@ -35,6 +35,8 @@ SOURCES_ALL = \
>  	arch-mips.h arch-mips.c arch-mips-syscalls.c \
>  	arch-mips64.h arch-mips64.c arch-mips64-syscalls.c \
>  	arch-mips64n32.h arch-mips64n32.c arch-mips64n32-syscalls.c \
> +	arch-parisc.h arch-parisc.c arch-parisc-syscalls.c \
> +	arch-parisc64.h arch-parisc64.c \
>  	arch-ppc.h arch-ppc.c arch-ppc-syscalls.c \
>  	arch-ppc64.h arch-ppc64.c arch-ppc64-syscalls.c \
>  	arch-s390.h arch-s390.c arch-s390-syscalls.c \
> diff --git a/src/arch-parisc-syscalls.c b/src/arch-parisc-syscalls.c
> new file mode 100644
> index 0000000..78474e1
> --- /dev/null
> +++ b/src/arch-parisc-syscalls.c
> @@ -0,0 +1,424 @@
> +/*
> + * Copyright 2016
> + * Author: Helge Deller <deller@xxxxxx>
> + */
> +
> +#include <string.h>
> +
> +#include <seccomp.h>
> +
> +#include "arch.h"
> +#include "arch-parisc.h"
> +
> +#ifndef __NR_Linux
> +#define __NR_Linux 0
> +#endif
> +
> +/* NOTE: based on Linux 4.3 */
> +const struct arch_syscall_def parisc_syscall_table[] = { \
> +	{ "_llseek",	(__NR_Linux + 140) },
> +	{ "_newselect",	(__NR_Linux + 142) },
> +	{ "_sysctl",	(__NR_Linux + 149) },
> +	{ "accept4",	(__NR_Linux + 320) },
> +	{ "accept",	(__NR_Linux + 35) },
> +	{ "access",	(__NR_Linux + 33) },
> +	{ "acct",	(__NR_Linux + 51) },
> +	{ "acl_get",	(__NR_Linux + 204) },
> +	{ "acl_set",	(__NR_Linux + 205) },
> +	{ "add_key",	(__NR_Linux + 264) },
> +	{ "adjtimex",	(__NR_Linux + 124) },
> +	{ "afs_syscall",	(__NR_Linux + 137) },
> +	{ "alarm",	(__NR_Linux + 27) },
> +	{ "alloc_hugepages",	(__NR_Linux + 220) },
> +	{ "attrctl",	(__NR_Linux + 203) },
> +	{ "bdflush",	(__NR_Linux + 134) },
> +	{ "bind",	(__NR_Linux + 22) },
> +	{ "bpf",	(__NR_Linux + 341) },
> +	{ "brk",	(__NR_Linux + 45) },
> +	{ "capget",	(__NR_Linux + 106) },
> +	{ "capset",	(__NR_Linux + 107) },
> +	{ "chdir",	(__NR_Linux + 12) },
> +	{ "chmod",	(__NR_Linux + 15) },
> +	{ "chown",	(__NR_Linux + 180) },
> +	{ "chroot",	(__NR_Linux + 61) },
> +	{ "clock_adjtime",	(__NR_Linux + 324) },
> +	{ "clock_getres",	(__NR_Linux + 257) },
> +	{ "clock_gettime",	(__NR_Linux + 256) },
> +	{ "clock_nanosleep",	(__NR_Linux + 258) },
> +	{ "clock_settime",	(__NR_Linux + 255) },
> +	{ "clone",	(__NR_Linux + 120) },
> +	{ "close",	(__NR_Linux + 6) },
> +	{ "connect",	(__NR_Linux + 31) },
> +	{ "create_module",	(__NR_Linux + 127) },
> +	{ "creat",	(__NR_Linux + 8) },
> +	{ "delete_module",	(__NR_Linux + 129) },
> +	{ "dup2",	(__NR_Linux + 63) },
> +	{ "dup3",	(__NR_Linux + 312) },
> +	{ "dup",	(__NR_Linux + 41) },
> +	{ "epoll_create1",	(__NR_Linux + 311) },
> +	{ "epoll_create",	(__NR_Linux + 224) },
> +	{ "epoll_ctl",	(__NR_Linux + 225) },
> +	{ "epoll_pwait",	(__NR_Linux + 297) },
> +	{ "epoll_wait",	(__NR_Linux + 226) },
> +	{ "eventfd2",	(__NR_Linux + 310) },
> +	{ "eventfd",	(__NR_Linux + 304) },
> +	{ "execveat",	(__NR_Linux + 342) },
> +	{ "execve",	(__NR_Linux + 11) },
> +	{ "exit_group",	(__NR_Linux + 222) },
> +	{ "exit",	(__NR_Linux + 1) },
> +	{ "faccessat",	(__NR_Linux + 287) },
> +	{ "fadvise64_64",	(__NR_Linux + 236) },
> +	{ "fallocate",	(__NR_Linux + 305) },
> +	{ "fanotify_init",	(__NR_Linux + 322) },
> +	{ "fanotify_mark",	(__NR_Linux + 323) },
> +	{ "fchdir",	(__NR_Linux + 133) },
> +	{ "fchmodat",	(__NR_Linux + 286) },
> +	{ "fchmod",	(__NR_Linux + 94) },
> +	{ "fchownat",	(__NR_Linux + 278) },
> +	{ "fchown",	(__NR_Linux + 95) },
> +	{ "fcntl64",	(__NR_Linux + 202) },
> +	{ "fcntl",	(__NR_Linux + 55) },
> +	{ "fdatasync",	(__NR_Linux + 148) },
> +	{ "fgetxattr",	(__NR_Linux + 243) },
> +	{ "finit_module",	(__NR_Linux + 333) },
> +	{ "flistxattr",	(__NR_Linux + 246) },
> +	{ "flock",	(__NR_Linux + 143) },
> +	{ "fork",	(__NR_Linux + 2) },
> +	{ "free_hugepages",	(__NR_Linux + 221) },
> +	{ "fremovexattr",	(__NR_Linux + 249) },
> +	{ "fsetxattr",	(__NR_Linux + 240) },
> +	{ "fstat64",	(__NR_Linux + 112) },
> +	{ "fstatat64",	(__NR_Linux + 280) },
> +	{ "fstatfs64",	(__NR_Linux + 299) },
> +	{ "fstatfs",	(__NR_Linux + 100) },
> +	{ "fstat",	(__NR_Linux + 28) },
> +	{ "fsync",	(__NR_Linux + 118) },
> +	{ "ftruncate64",	(__NR_Linux + 200) },
> +	{ "ftruncate",	(__NR_Linux + 93) },
> +	{ "futex",	(__NR_Linux + 210) },
> +	{ "futimesat",	(__NR_Linux + 279) },
> +	{ "getcpu",	(__NR_Linux + 296) },
> +	{ "getcwd",	(__NR_Linux + 110) },
> +	{ "getdents64",	(__NR_Linux + 201) },
> +	{ "getdents",	(__NR_Linux + 141) },
> +	{ "getegid",	(__NR_Linux + 50) },
> +	{ "geteuid",	(__NR_Linux + 49) },
> +	{ "getgid",	(__NR_Linux + 47) },
> +	{ "getgroups",	(__NR_Linux + 80) },
> +	{ "getitimer",	(__NR_Linux + 105) },
> +	{ "get_kernel_syms",	(__NR_Linux + 130) },
> +	{ "get_mempolicy",	(__NR_Linux + 261) },
> +	{ "getpeername",	(__NR_Linux + 53) },
> +	{ "getpgid",	(__NR_Linux + 132) },
> +	{ "getpgrp",	(__NR_Linux + 65) },
> +	{ "getpid",	(__NR_Linux + 20) },
> +	{ "getpmsg",	(__NR_Linux + 196) },
> +	{ "getppid",	(__NR_Linux + 64) },
> +	{ "getpriority",	(__NR_Linux + 96) },
> +	{ "getrandom",	(__NR_Linux + 339) },
> +	{ "getresgid",	(__NR_Linux + 171) },
> +	{ "getresuid",	(__NR_Linux + 165) },
> +	{ "getrlimit",	(__NR_Linux + 76) },
> +	{ "get_robust_list",	(__NR_Linux + 290) },
> +	{ "getrusage",	(__NR_Linux + 77) },
> +	{ "getsid",	(__NR_Linux + 147) },
> +	{ "getsockname",	(__NR_Linux + 44) },
> +	{ "getsockopt",	(__NR_Linux + 182) },
> +	{ "get_thread_area",	(__NR_Linux + 214) },
> +	{ "gettid",	(__NR_Linux + 206) },
> +	{ "gettimeofday",	(__NR_Linux + 78) },
> +	{ "getuid",	(__NR_Linux + 24) },
> +	{ "getxattr",	(__NR_Linux + 241) },
> +	{ "init_module",	(__NR_Linux + 128) },
> +	{ "inotify_add_watch",	(__NR_Linux + 270) },
> +	{ "inotify_init1",	(__NR_Linux + 314) },
> +	{ "inotify_init",	(__NR_Linux + 269) },
> +	{ "inotify_rm_watch",	(__NR_Linux + 271) },
> +	{ "io_cancel",	(__NR_Linux + 219) },
> +	{ "ioctl",	(__NR_Linux + 54) },
> +	{ "io_destroy",	(__NR_Linux + 216) },
> +	{ "io_getevents",	(__NR_Linux + 217) },
> +	{ "ioprio_get",	(__NR_Linux + 268) },
> +	{ "ioprio_set",	(__NR_Linux + 267) },
> +	{ "io_setup",	(__NR_Linux + 215) },
> +	{ "io_submit",	(__NR_Linux + 218) },
> +	{ "kcmp",	(__NR_Linux + 332) },
> +	{ "kexec_load",	(__NR_Linux + 300) },
> +	{ "keyctl",	(__NR_Linux + 266) },
> +	{ "kill",	(__NR_Linux + 37) },
> +	{ "lchown",	(__NR_Linux + 16) },
> +	{ "lgetxattr",	(__NR_Linux + 242) },
> +	{ "linkat",	(__NR_Linux + 283) },
> +	{ "link",	(__NR_Linux + 9) },
> +	{ "listen",	(__NR_Linux + 32) },
> +	{ "listxattr",	(__NR_Linux + 244) },
> +	{ "llistxattr",	(__NR_Linux + 245) },
> +	{ "lookup_dcookie",	(__NR_Linux + 223) },
> +	{ "lremovexattr",	(__NR_Linux + 248) },
> +	{ "lseek",	(__NR_Linux + 19) },
> +	{ "lsetxattr",	(__NR_Linux + 239) },
> +	{ "lstat64",	(__NR_Linux + 198) },
> +	{ "lstat",	(__NR_Linux + 84) },
> +	{ "madvise",	(__NR_Linux + 119) },
> +	{ "mbind",	(__NR_Linux + 260) },
> +	{ "memfd_create",	(__NR_Linux + 340) },
> +	{ "migrate_pages",	(__NR_Linux + 272) },
> +	{ "mincore",	(__NR_Linux + 72) },
> +	{ "mkdirat",	(__NR_Linux + 276) },
> +	{ "mkdir",	(__NR_Linux + 39) },
> +	{ "mknodat",	(__NR_Linux + 277) },
> +	{ "mknod",	(__NR_Linux + 14) },
> +	{ "mlockall",	(__NR_Linux + 152) },
> +	{ "mlock",	(__NR_Linux + 150) },
> +	{ "mmap2",	(__NR_Linux + 89) },
> +	{ "mmap",	(__NR_Linux + 90) },
> +	{ "mount",	(__NR_Linux + 21) },
> +	{ "move_pages",	(__NR_Linux + 295) },
> +	{ "mprotect",	(__NR_Linux + 125) },
> +	{ "mq_getsetattr",	(__NR_Linux + 234) },
> +	{ "mq_notify",	(__NR_Linux + 233) },
> +	{ "mq_open",	(__NR_Linux + 229) },
> +	{ "mq_timedreceive",	(__NR_Linux + 232) },
> +	{ "mq_timedsend",	(__NR_Linux + 231) },
> +	{ "mq_unlink",	(__NR_Linux + 230) },
> +	{ "mremap",	(__NR_Linux + 163) },
> +	{ "msgctl",	(__NR_Linux + 191) },
> +	{ "msgget",	(__NR_Linux + 190) },
> +	{ "msgrcv",	(__NR_Linux + 189) },
> +	{ "msgsnd",	(__NR_Linux + 188) },
> +	{ "msync",	(__NR_Linux + 144) },
> +	{ "munlockall",	(__NR_Linux + 153) },
> +	{ "munlock",	(__NR_Linux + 151) },
> +	{ "munmap",	(__NR_Linux + 91) },
> +	{ "name_to_handle_at",	(__NR_Linux + 325) },
> +	{ "nanosleep",	(__NR_Linux + 162) },
> +	{ "nfsservctl",	(__NR_Linux + 169) },
> +	{ "nice",	(__NR_Linux + 34) },
> +	{ "openat",	(__NR_Linux + 275) },
> +	{ "open_by_handle_at",	(__NR_Linux + 326) },
> +	{ "open",	(__NR_Linux + 5) },
> +	{ "pause",	(__NR_Linux + 29) },
> +	{ "perf_event_open",	(__NR_Linux + 318) },
> +	{ "personality",	(__NR_Linux + 136) },
> +	{ "pipe2",	(__NR_Linux + 313) },
> +	{ "pipe",	(__NR_Linux + 42) },
> +	{ "pivot_root",	(__NR_Linux + 67) },
> +	{ "poll",	(__NR_Linux + 168) },
> +	{ "ppoll",	(__NR_Linux + 274) },
> +	{ "prctl",	(__NR_Linux + 172) },
> +	{ "pread64",	(__NR_Linux + 108) },
> +	{ "preadv",	(__NR_Linux + 315) },
> +	{ "prlimit64",	(__NR_Linux + 321) },
> +	{ "process_vm_readv",	(__NR_Linux + 330) },
> +	{ "process_vm_writev",	(__NR_Linux + 331) },
> +	{ "pselect6",	(__NR_Linux + 273) },
> +	{ "ptrace",	(__NR_Linux + 26) },
> +	{ "putpmsg",	(__NR_Linux + 197) },
> +	{ "pwrite64",	(__NR_Linux + 109) },
> +	{ "pwritev",	(__NR_Linux + 316) },
> +	{ "query_module",	(__NR_Linux + 167) },
> +	{ "quotactl",	(__NR_Linux + 131) },
> +	{ "readahead",	(__NR_Linux + 207) },
> +	{ "readlinkat",	(__NR_Linux + 285) },
> +	{ "readlink",	(__NR_Linux + 85) },
> +	{ "read",	(__NR_Linux + 3) },
> +	{ "readv",	(__NR_Linux + 145) },
> +	{ "reboot",	(__NR_Linux + 88) },
> +	{ "recvfrom",	(__NR_Linux + 123) },
> +	{ "recvmmsg",	(__NR_Linux + 319) },
> +	{ "recvmsg",	(__NR_Linux + 184) },
> +	{ "recv",	(__NR_Linux + 98) },
> +	{ "remap_file_pages",	(__NR_Linux + 227) },
> +	{ "removexattr",	(__NR_Linux + 247) },
> +	{ "renameat2",	(__NR_Linux + 337) },
> +	{ "renameat",	(__NR_Linux + 282) },
> +	{ "rename",	(__NR_Linux + 38) },
> +	{ "request_key",	(__NR_Linux + 265) },
> +	{ "restart_syscall",	(__NR_Linux + 0) },
> +	{ "rmdir",	(__NR_Linux + 40) },
> +	{ "rt_sigaction",	(__NR_Linux + 174) },
> +	{ "rt_sigpending",	(__NR_Linux + 176) },
> +	{ "rt_sigprocmask",	(__NR_Linux + 175) },
> +	{ "rt_sigqueueinfo",	(__NR_Linux + 178) },
> +	{ "rt_sigreturn",	(__NR_Linux + 173) },
> +	{ "rt_sigsuspend",	(__NR_Linux + 179) },
> +	{ "rt_sigtimedwait",	(__NR_Linux + 177) },
> +	{ "rt_tgsigqueueinfo",	(__NR_Linux + 317) },
> +	{ "sched_getaffinity",	(__NR_Linux + 212) },
> +	{ "sched_getattr",	(__NR_Linux + 335) },
> +	{ "sched_getparam",	(__NR_Linux + 155) },
> +	{ "sched_get_priority_max",	(__NR_Linux + 159) },
> +	{ "sched_get_priority_min",	(__NR_Linux + 160) },
> +	{ "sched_getscheduler",	(__NR_Linux + 157) },
> +	{ "sched_rr_get_interval",	(__NR_Linux + 161) },
> +	{ "sched_setaffinity",	(__NR_Linux + 211) },
> +	{ "sched_setattr",	(__NR_Linux + 334) },
> +	{ "sched_setparam",	(__NR_Linux + 154) },
> +	{ "sched_setscheduler",	(__NR_Linux + 156) },
> +	{ "sched_yield",	(__NR_Linux + 158) },
> +	{ "seccomp",	(__NR_Linux + 338) },
> +	{ "semctl",	(__NR_Linux + 187) },
> +	{ "semget",	(__NR_Linux + 186) },
> +	{ "semop",	(__NR_Linux + 185) },
> +	{ "semtimedop",	(__NR_Linux + 228) },
> +	{ "sendfile64",	(__NR_Linux + 209) },
> +	{ "sendfile",	(__NR_Linux + 122) },
> +	{ "sendmmsg",	(__NR_Linux + 329) },
> +	{ "sendmsg",	(__NR_Linux + 183) },
> +	{ "send",	(__NR_Linux + 58) },
> +	{ "sendto",	(__NR_Linux + 82) },
> +	{ "setdomainname",	(__NR_Linux + 121) },
> +	{ "setfsgid",	(__NR_Linux + 139) },
> +	{ "setfsuid",	(__NR_Linux + 138) },
> +	{ "setgid",	(__NR_Linux + 46) },
> +	{ "setgroups",	(__NR_Linux + 81) },
> +	{ "sethostname",	(__NR_Linux + 74) },
> +	{ "setitimer",	(__NR_Linux + 104) },
> +	{ "set_mempolicy",	(__NR_Linux + 262) },
> +	{ "setns",	(__NR_Linux + 328) },
> +	{ "setpgid",	(__NR_Linux + 57) },
> +	{ "setpriority",	(__NR_Linux + 97) },
> +	{ "setregid",	(__NR_Linux + 71) },
> +	{ "setresgid",	(__NR_Linux + 170) },
> +	{ "setresuid",	(__NR_Linux + 164) },
> +	{ "setreuid",	(__NR_Linux + 70) },
> +	{ "setrlimit",	(__NR_Linux + 75) },
> +	{ "set_robust_list",	(__NR_Linux + 289) },
> +	{ "setsid",	(__NR_Linux + 66) },
> +	{ "setsockopt",	(__NR_Linux + 181) },
> +	{ "set_thread_area",	(__NR_Linux + 213) },
> +	{ "set_tid_address",	(__NR_Linux + 237) },
> +	{ "settimeofday",	(__NR_Linux + 79) },
> +	{ "setuid",	(__NR_Linux + 23) },
> +	{ "setxattr",	(__NR_Linux + 238) },
> +	{ "sgetmask",	(__NR_Linux + 68) },
> +	{ "shmat",	(__NR_Linux + 192) },
> +	{ "shmctl",	(__NR_Linux + 195) },
> +	{ "shmdt",	(__NR_Linux + 193) },
> +	{ "shmget",	(__NR_Linux + 194) },
> +	{ "shutdown",	(__NR_Linux + 117) },
> +	{ "sigaltstack",	(__NR_Linux + 166) },
> +	{ "signalfd4",	(__NR_Linux + 309) },
> +	{ "signalfd",	(__NR_Linux + 302) },
> +	{ "signal",	(__NR_Linux + 48) },
> +	{ "sigpending",	(__NR_Linux + 73) },
> +	{ "sigprocmask",	(__NR_Linux + 126) },
> +	{ "socket",	(__NR_Linux + 17) },
> +	{ "socketpair",	(__NR_Linux + 56) },
> +	{ "splice",	(__NR_Linux + 291) },
> +	{ "ssetmask",	(__NR_Linux + 69) },
> +	{ "stat64",	(__NR_Linux + 101) },
> +	{ "statfs64",	(__NR_Linux + 298) },
> +	{ "statfs",	(__NR_Linux + 99) },
> +	{ "stat",	(__NR_Linux + 18) },
> +	{ "stime",	(__NR_Linux + 25) },
> +	{ "swapoff",	(__NR_Linux + 115) },
> +	{ "swapon",	(__NR_Linux + 87) },
> +	{ "symlinkat",	(__NR_Linux + 284) },
> +	{ "symlink",	(__NR_Linux + 83) },
> +	{ "sync_file_range",	(__NR_Linux + 292) },
> +	{ "syncfs",	(__NR_Linux + 327) },
> +	{ "sync",	(__NR_Linux + 36) },
> +	{ "sysfs",	(__NR_Linux + 135) },
> +	{ "sysmips",	__PNR_sysmips },
> +	{ "sysinfo",	(__NR_Linux + 116) },
> +	{ "syslog",	(__NR_Linux + 103) },
> +	{ "tee",	(__NR_Linux + 293) },
> +	{ "tgkill",	(__NR_Linux + 259) },
> +	{ "time",	(__NR_Linux + 13) },
> +	{ "timer_create",	(__NR_Linux + 250) },
> +	{ "timer_delete",	(__NR_Linux + 254) },
> +	{ "timerfd_create",	(__NR_Linux + 306) },
> +	{ "timerfd_gettime",	(__NR_Linux + 308) },
> +	{ "timerfd",	(__NR_Linux + 303) },
> +	{ "timerfd_settime",	(__NR_Linux + 307) },
> +	{ "timer_getoverrun",	(__NR_Linux + 253) },
> +	{ "timer_gettime",	(__NR_Linux + 252) },
> +	{ "timer_settime",	(__NR_Linux + 251) },
> +	{ "times",	(__NR_Linux + 43) },
> +	{ "tkill",	(__NR_Linux + 208) },
> +	{ "truncate64",	(__NR_Linux + 199) },
> +	{ "truncate",	(__NR_Linux + 92) },
> +	{ "tuxcall",	__PNR_tuxcall },
> +	{ "umask",	(__NR_Linux + 60) },
> +	{ "umount2",	(__NR_Linux + 52) },
> +	{ "uname",	(__NR_Linux + 59) },
> +	{ "unlinkat",	(__NR_Linux + 281) },
> +	{ "unlink",	(__NR_Linux + 10) },
> +	{ "unshare",	(__NR_Linux + 288) },
> +	{ "uselib",	(__NR_Linux + 86) },
> +	{ "ustat",	(__NR_Linux + 62) },
> +	{ "utime",	(__NR_Linux + 30) },
> +	{ "utimensat",	(__NR_Linux + 301) },
> +	{ "utimes",	(__NR_Linux + 336) },
> +	{ "vfork",	(__NR_Linux + 113) },
> +	{ "vhangup",	(__NR_Linux + 111) },
> +	{ "vmsplice",	(__NR_Linux + 294) },
> +	{ "vserver",	(__NR_Linux + 263) },
> +	{ "wait4",	(__NR_Linux + 114) },
> +	{ "waitid",	(__NR_Linux + 235) },
> +	{ "waitpid",	(__NR_Linux + 7) },
> +	{ "write",	(__NR_Linux + 4) },
> +	{ "writev",	(__NR_Linux + 146) },
> +	{ NULL, __NR_SCMP_ERROR },
> +};
> +
> +/**
> + * Resolve a syscall name to a number
> + * @param name the syscall name
> + *
> + * Resolve the given syscall name to the syscall number using the syscall table.
> + * Returns the syscall number on success, including negative pseudo syscall
> + * numbers; returns __NR_SCMP_ERROR on failure.
> + *
> + */
> +int parisc_syscall_resolve_name(const char *name)
> +{
> +	unsigned int iter;
> +	const struct arch_syscall_def *table = parisc_syscall_table;
> +
> +	/* XXX - plenty of room for future improvement here */
> +	for (iter = 0; table[iter].name != NULL; iter++) {
> +		if (strcmp(name, table[iter].name) == 0)
> +			return table[iter].num;
> +	}
> +
> +	return __NR_SCMP_ERROR;
> +}
> +
> +/**
> + * Resolve a syscall number to a name
> + * @param num the syscall number
> + *
> + * Resolve the given syscall number to the syscall name using the syscall table.
> + * Returns a pointer to the syscall name string on success, including pseudo
> + * syscall names; returns NULL on failure.
> + *
> + */
> +const char *parisc_syscall_resolve_num(int num)
> +{
> +	unsigned int iter;
> +	const struct arch_syscall_def *table = parisc_syscall_table;
> +
> +	/* XXX - plenty of room for future improvement here */
> +	for (iter = 0; table[iter].num != __NR_SCMP_ERROR; iter++) {
> +		if (num == table[iter].num)
> +			return table[iter].name;
> +	}
> +
> +	return NULL;
> +}
> +
> +/**
> + * Iterate through the syscall table and return the syscall name
> + * @param spot the offset into the syscall table
> + *
> + * Return the syscall name at position @spot or NULL on failure.  This function
> + * should only ever be used internally by libseccomp.
> + *
> + */
> +const char *parisc_syscall_iterate_name(unsigned int spot)
> +{
> +	/* XXX - no safety checks here */
> +	return parisc_syscall_table[spot].name;
> +}
> diff --git a/src/arch-parisc.c b/src/arch-parisc.c
> new file mode 100644
> index 0000000..6407f8a
> --- /dev/null
> +++ b/src/arch-parisc.c
> @@ -0,0 +1,22 @@
> +/*
> + * Copyright 2016
> + * Author: Helge Deller <deller@xxxxxx>
> + */
> +
> +#include <stdlib.h>
> +#include <errno.h>
> +#include <linux/audit.h>
> +
> +#include "arch.h"
> +#include "arch-parisc.h"
> +
> +const struct arch_def arch_def_parisc = {
> +	.token = SCMP_ARCH_PARISC,
> +	.token_bpf = AUDIT_ARCH_PARISC,
> +	.size = ARCH_SIZE_32,
> +	.endian = ARCH_ENDIAN_BIG,
> +	.syscall_resolve_name = parisc_syscall_resolve_name,
> +	.syscall_resolve_num = parisc_syscall_resolve_num,
> +	.syscall_rewrite = NULL,
> +	.rule_add = NULL,
> +};
> diff --git a/src/arch-parisc.h b/src/arch-parisc.h
> new file mode 100644
> index 0000000..b9fe1df
> --- /dev/null
> +++ b/src/arch-parisc.h
> @@ -0,0 +1,38 @@
> +/**
> + * Enhanced Seccomp PARISC Specific Code
> + *
> + * Copyright (c) 2016 Helge Deller <deller@xxxxxx>
> + *
> + */
> +
> +/*
> + * This library is free software; you can redistribute it and/or modify it
> + * under the terms of version 2.1 of the GNU Lesser General Public License as
> + * published by the Free Software Foundation.
> + *
> + * This library is distributed in the hope that it will be useful, but WITHOUT
> + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
> + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
> + * for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public License
> + * along with this library; if not, see <http://www.gnu.org/licenses>.
> + */
> +
> +#ifndef _ARCH_PARISC_H
> +#define _ARCH_PARISC_H
> +
> +#include <inttypes.h>
> +
> +#include "arch.h"
> +#include "system.h"
> +
> +extern const struct arch_def arch_def_parisc;
> +extern const struct arch_def arch_def_parisc64;
> +
> +int parisc_syscall_resolve_name(const char *name);
> +const char *parisc_syscall_resolve_num(int num);
> +
> +const char *parisc_syscall_iterate_name(unsigned int spot);
> +
> +#endif
> diff --git a/src/arch-parisc64.c b/src/arch-parisc64.c
> new file mode 100644
> index 0000000..b75a182
> --- /dev/null
> +++ b/src/arch-parisc64.c
> @@ -0,0 +1,22 @@
> +/*
> + * Copyright 2016
> + * Author: Helge Deller <deller@xxxxxx>
> +*/
> +
> +#include <stdlib.h>
> +#include <errno.h>
> +#include <linux/audit.h>
> +
> +#include "arch.h"
> +#include "arch-parisc.h"
> +
> +const struct arch_def arch_def_parisc64 = {
> +	.token = SCMP_ARCH_PARISC64,
> +	.token_bpf = AUDIT_ARCH_PARISC64,
> +	.size = ARCH_SIZE_64,
> +	.endian = ARCH_ENDIAN_BIG,
> +	.syscall_resolve_name = parisc_syscall_resolve_name,
> +	.syscall_resolve_num = parisc_syscall_resolve_num,
> +	.syscall_rewrite = NULL,
> +	.rule_add = NULL,
> +};
> diff --git a/src/arch-syscall-dump.c b/src/arch-syscall-dump.c
> index 636fd9a..c95b899 100644
> --- a/src/arch-syscall-dump.c
> +++ b/src/arch-syscall-dump.c
> @@ -38,6 +38,7 @@
>  #include "arch-mips64.h"
>  #include "arch-mips64n32.h"
>  #include "arch-aarch64.h"
> +#include "arch-parisc.h"
>  #include "arch-ppc.h"
>  #include "arch-ppc64.h"
>  #include "arch-s390.h"
> @@ -116,6 +117,10 @@ int main(int argc, char *argv[])
>  		case SCMP_ARCH_MIPSEL64N32:
>  			sys_name = mips64n32_syscall_iterate_name(iter);
>  			break;
> +		case SCMP_ARCH_PARISC:
> +		case SCMP_ARCH_PARISC64:
> +			sys_name = parisc_syscall_iterate_name(iter);
> +			break;
>  		case SCMP_ARCH_PPC:
>  			sys_name = ppc_syscall_iterate_name(iter);
>  			break;
> diff --git a/src/arch.c b/src/arch.c
> index 0f24d1c..f5a898d 100644
> --- a/src/arch.c
> +++ b/src/arch.c
> @@ -38,6 +38,7 @@
>  #include "arch-mips.h"
>  #include "arch-mips64.h"
>  #include "arch-mips64n32.h"
> +#include "arch-parisc.h"
>  #include "arch-ppc.h"
>  #include "arch-ppc64.h"
>  #include "arch-s390.h"
> @@ -79,6 +80,10 @@ const struct arch_def *arch_def_native = &arch_def_mips64n32;
>  #elif __MIPSEL__
>  const struct arch_def *arch_def_native = &arch_def_mipsel64n32;
>  #endif /* _MIPS_SIM_NABI32 */
> +#elif __hppa64__ /* hppa64 must be checked before hppa */
> +const struct arch_def *arch_def_native = &arch_def_parisc64;
> +#elif __hppa__
> +const struct arch_def *arch_def_native = &arch_def_parisc;
>  #elif __PPC64__
>  #ifdef __BIG_ENDIAN__
>  const struct arch_def *arch_def_native = &arch_def_ppc64;
> @@ -139,6 +144,10 @@ const struct arch_def *arch_def_lookup(uint32_t token)
>  		return &arch_def_mips64n32;
>  	case SCMP_ARCH_MIPSEL64N32:
>  		return &arch_def_mipsel64n32;
> +	case SCMP_ARCH_PARISC:
> +		return &arch_def_parisc;
> +	case SCMP_ARCH_PARISC64:
> +		return &arch_def_parisc64;
>  	case SCMP_ARCH_PPC:
>  		return &arch_def_ppc;
>  	case SCMP_ARCH_PPC64:
> @@ -185,6 +194,10 @@ const struct arch_def *arch_def_lookup_name(const char *arch_name)
>  		return &arch_def_mips64n32;
>  	else if (strcmp(arch_name, "mipsel64n32") == 0)
>  		return &arch_def_mipsel64n32;
> +	else if (strcmp(arch_name, "parisc64") == 0)
> +		return &arch_def_parisc64;
> +	else if (strcmp(arch_name, "parisc") == 0)
> +		return &arch_def_parisc;
>  	else if (strcmp(arch_name, "ppc") == 0)
>  		return &arch_def_ppc;
>  	else if (strcmp(arch_name, "ppc64") == 0)
> diff --git a/src/gen_pfc.c b/src/gen_pfc.c
> index 99c3297..b9c122e 100644
> --- a/src/gen_pfc.c
> +++ b/src/gen_pfc.c
> @@ -71,6 +71,10 @@ static const char *_pfc_arch(const struct arch_def *arch)
>  		return "mips64n32";
>  	case SCMP_ARCH_MIPSEL64N32:
>  		return "mipsel64n32";
> +	case SCMP_ARCH_PARISC:
> +		return "parisc";
> +	case SCMP_ARCH_PARISC64:
> +		return "parisc64";
>  	case SCMP_ARCH_PPC64:
>  		return "ppc64";
>  	case SCMP_ARCH_PPC64LE:
> diff --git a/src/python/libseccomp.pxd b/src/python/libseccomp.pxd
> index 15c94f8..500da15 100644
> --- a/src/python/libseccomp.pxd
> +++ b/src/python/libseccomp.pxd
> @@ -43,6 +43,8 @@ cdef extern from "seccomp.h":
>          SCMP_ARCH_MIPSEL
>          SCMP_ARCH_MIPSEL64
>          SCMP_ARCH_MIPSEL64N32
> +        SCMP_ARCH_PARISC
> +        SCMP_ARCH_PARISC64
>          SCMP_ARCH_PPC
>          SCMP_ARCH_PPC64
>          SCMP_ARCH_PPC64LE
> diff --git a/src/python/seccomp.pyx b/src/python/seccomp.pyx
> index c87bc3f..cb17642 100644
> --- a/src/python/seccomp.pyx
> +++ b/src/python/seccomp.pyx
> @@ -147,6 +147,8 @@ cdef class Arch:
>      MIPSEL - MIPS little endian O32 ABI
>      MIPSEL64 - MIPS little endian 64-bit ABI
>      MIPSEL64N32 - MIPS little endian N32 ABI
> +    PARISC - 32-bit PA-RISC
> +    PARISC64 - 64-bit PA-RISC
>      PPC64 - 64-bit PowerPC
>      PPC - 32-bit PowerPC
>      """
> @@ -165,6 +167,8 @@ cdef class Arch:
>      MIPSEL = libseccomp.SCMP_ARCH_MIPSEL
>      MIPSEL64 = libseccomp.SCMP_ARCH_MIPSEL64
>      MIPSEL64N32 = libseccomp.SCMP_ARCH_MIPSEL64N32
> +    PARISC = libseccomp.SCMP_ARCH_PARISC
> +    PARISC64 = libseccomp.SCMP_ARCH_PARISC64
>      PPC = libseccomp.SCMP_ARCH_PPC
>      PPC64 = libseccomp.SCMP_ARCH_PPC64
>      PPC64LE = libseccomp.SCMP_ARCH_PPC64LE
> @@ -205,6 +209,10 @@ cdef class Arch:
>                  self._token = libseccomp.SCMP_ARCH_MIPSEL64
>              elif arch == libseccomp.SCMP_ARCH_MIPSEL64N32:
>                  self._token = libseccomp.SCMP_ARCH_MIPSEL64N32
> +            elif arch == libseccomp.SCMP_ARCH_PARISC:
> +                self._token = libseccomp.SCMP_ARCH_PARISC
> +            elif arch == libseccomp.SCMP_ARCH_PARISC64:
> +                self._token = libseccomp.SCMP_ARCH_PARISC64
>              elif arch == libseccomp.SCMP_ARCH_PPC:
>                  self._token = libseccomp.SCMP_ARCH_PPC
>              elif arch == libseccomp.SCMP_ARCH_PPC64:
> diff --git a/tests/26-sim-arch_all_be_basic.c b/tests/26-sim-arch_all_be_basic.c
> index d2c191c..d31ce12 100644
> --- a/tests/26-sim-arch_all_be_basic.c
> +++ b/tests/26-sim-arch_all_be_basic.c
> @@ -52,6 +52,12 @@ int main(int argc, char *argv[])
>  	rc = seccomp_arch_add(ctx, seccomp_arch_resolve_name("mips64n32"));
>  	if (rc != 0)
>  		goto out;
> +	rc = seccomp_arch_add(ctx, seccomp_arch_resolve_name("parisc"));
> +	if (rc != 0)
> +		goto out;
> +	rc = seccomp_arch_add(ctx, seccomp_arch_resolve_name("parisc64"));
> +	if (rc != 0)
> +		goto out;
>  	rc = seccomp_arch_add(ctx, seccomp_arch_resolve_name("ppc"));
>  	if (rc != 0)
>  		goto out;
> diff --git a/tests/26-sim-arch_all_be_basic.py b/tests/26-sim-arch_all_be_basic.py
> index b0b660a..3a177b4 100755
> --- a/tests/26-sim-arch_all_be_basic.py
> +++ b/tests/26-sim-arch_all_be_basic.py
> @@ -33,6 +33,8 @@ def test(args):
>      f.add_arch(Arch("mips"))
>      f.add_arch(Arch("mips64"))
>      f.add_arch(Arch("mips64n32"))
> +    f.add_arch(Arch("parisc"))
> +    f.add_arch(Arch("parisc64"))
>      f.add_arch(Arch("ppc"))
>      f.add_arch(Arch("ppc64"))
>      f.add_arch(Arch("s390"))
> diff --git a/tests/regression b/tests/regression
> index 53d26b2..5949459 100755
> --- a/tests/regression
> +++ b/tests/regression
> @@ -28,6 +28,7 @@ GLBL_ARCH_LE_SUPPORT=" \
>  	ppc64le"
>  GLBL_ARCH_BE_SUPPORT=" \
>  	mips mips64 mips64n32 \
> +	parisc parisc64 \
>  	ppc ppc64 \
>  	s390 s390x"
>  
> @@ -701,7 +702,7 @@ function run_test_live() {
>  
>  	# setup the arch specific return values
>  	case "$arch" in
> -	x86|x86_64|x32|arm|aarch64|ppc|ppc64|ppc64le|ppc|s390|s390x)
> +	x86|x86_64|x32|arm|aarch64|parisc|parisc64|ppc|ppc64|ppc64le|ppc|s390|s390x)
>  		rc_kill=159
>  		rc_allow=160
>  		rc_trap=161
> diff --git a/tools/scmp_arch_detect.c b/tools/scmp_arch_detect.c
> index 4b452d1..ad43f2d 100644
> --- a/tools/scmp_arch_detect.c
> +++ b/tools/scmp_arch_detect.c
> @@ -99,6 +99,12 @@ int main(int argc, char *argv[])
>  		case SCMP_ARCH_MIPSEL64N32:
>  			printf("mipsel64n32\n");
>  			break;
> +		case SCMP_ARCH_PARISC:
> +			printf("parisc\n");
> +			break;
> +		case SCMP_ARCH_PARISC64:
> +			printf("parisc64\n");
> +			break;
>  		case SCMP_ARCH_PPC:
>  			printf("ppc\n");
>  			break;
> diff --git a/tools/scmp_bpf_sim.c b/tools/scmp_bpf_sim.c
> index a0cf6d1..3d3204a 100644
> --- a/tools/scmp_bpf_sim.c
> +++ b/tools/scmp_bpf_sim.c
> @@ -265,6 +265,10 @@ int main(int argc, char *argv[])
>  				arch = AUDIT_ARCH_MIPS64N32;
>  			else if (strcmp(optarg, "mipsel64n32") == 0)
>  				arch = AUDIT_ARCH_MIPSEL64N32;
> +			else if (strcmp(optarg, "parisc") == 0)
> +				arch = AUDIT_ARCH_PARISC;
> +			else if (strcmp(optarg, "parisc64") == 0)
> +				arch = AUDIT_ARCH_PARISC64;
>  			else if (strcmp(optarg, "ppc") == 0)
>  				arch = AUDIT_ARCH_PPC;
>  			else if (strcmp(optarg, "ppc64") == 0)
> diff --git a/tools/util.c b/tools/util.c
> index cc48647..7122335 100644
> --- a/tools/util.c
> +++ b/tools/util.c
> @@ -62,6 +62,10 @@
>  #elif __MIPSEL__
>  #define ARCH_NATIVE		AUDIT_ARCH_MIPSEL64N32
>  #endif /* _MIPS_SIM_NABI32 */
> +#elif __hppa64__
> +#define ARCH_NATIVE		AUDIT_ARCH_PARISC64
> +#elif __hppa__
> +#define ARCH_NATIVE		AUDIT_ARCH_PARISC
>  #elif __PPC64__
>  #ifdef __BIG_ENDIAN__
>  #define ARCH_NATIVE		AUDIT_ARCH_PPC64
> --
> To unsubscribe from this list: send the line "unsubscribe linux-parisc" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-parisc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux SoC]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux