summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Moore <paul@paul-moore.com>2017-02-23 16:52:50 -0500
committerPaul Moore <paul@paul-moore.com>2017-02-23 16:52:50 -0500
commit1674c6117274b50d5c2c71354723767bb48e16b0 (patch)
tree2060e77e5010543d78d571a807bad703d3dd6f87
parent27d43de2d0804cb155123b44b6386501dc725715 (diff)
downloadlibseccomp-1674c6117274b50d5c2c71354723767bb48e16b0.tar.gz
tests: test the syscall resolver on all supported architectures
Signed-off-by: Paul Moore <paul@paul-moore.com>
-rw-r--r--tests/15-basic-resolver.c77
1 files changed, 53 insertions, 24 deletions
diff --git a/tests/15-basic-resolver.c b/tests/15-basic-resolver.c
index 9582bc3..0c195bb 100644
--- a/tests/15-basic-resolver.c
+++ b/tests/15-basic-resolver.c
@@ -25,9 +25,33 @@
#include <seccomp.h>
+unsigned int arch_list[] = {
+ SCMP_ARCH_X86,
+ SCMP_ARCH_X86_64,
+ SCMP_ARCH_X32,
+ SCMP_ARCH_ARM,
+ SCMP_ARCH_AARCH64,
+ SCMP_ARCH_MIPS,
+ SCMP_ARCH_MIPS64,
+ SCMP_ARCH_MIPS64N32,
+ SCMP_ARCH_MIPSEL,
+ SCMP_ARCH_MIPSEL64,
+ SCMP_ARCH_MIPSEL64N32,
+ SCMP_ARCH_PPC,
+ SCMP_ARCH_PPC64,
+ SCMP_ARCH_PPC64LE,
+ SCMP_ARCH_S390,
+ SCMP_ARCH_S390X,
+ SCMP_ARCH_PARISC,
+ SCMP_ARCH_PARISC64,
+ -1
+};
+
int main(int argc, char *argv[])
{
int rc;
+ int iter = 0;
+ unsigned int arch;
char *name = NULL;
if (seccomp_syscall_resolve_name("open") != __NR_open)
@@ -37,35 +61,40 @@ int main(int argc, char *argv[])
if (seccomp_syscall_resolve_name("INVALID") != __NR_SCMP_ERROR)
goto fail;
- if (seccomp_syscall_resolve_name_arch(SCMP_ARCH_NATIVE,
- "open") != __NR_open)
- goto fail;
- if (seccomp_syscall_resolve_name_arch(SCMP_ARCH_NATIVE,
- "read") != __NR_read)
- goto fail;
- if (seccomp_syscall_resolve_name_arch(SCMP_ARCH_NATIVE,
- "INVALID") != __NR_SCMP_ERROR)
+ rc = seccomp_syscall_resolve_name_rewrite(SCMP_ARCH_NATIVE, "openat");
+ if (rc != __NR_openat)
goto fail;
- name = seccomp_syscall_resolve_num_arch(SCMP_ARCH_NATIVE, __NR_open);
- if (name == NULL || strcmp(name, "open") != 0)
- goto fail;
- free(name);
+ while ((arch = arch_list[iter++]) != -1) {
+ int nr_open;
+ int nr_read;
- name = seccomp_syscall_resolve_num_arch(SCMP_ARCH_NATIVE, __NR_read);
- if (name == NULL || strcmp(name, "read") != 0)
- goto fail;
- free(name);
+ if (seccomp_syscall_resolve_name_arch(arch,
+ "INVALID") != __NR_SCMP_ERROR)
+ goto fail;
+ name = seccomp_syscall_resolve_num_arch(arch, __NR_SCMP_ERROR);
+ if (name != NULL)
+ goto fail;
- name = seccomp_syscall_resolve_num_arch(SCMP_ARCH_NATIVE,
- __NR_SCMP_ERROR);
- if (name != NULL)
- goto fail;
- free(name);
+ nr_open = seccomp_syscall_resolve_name_arch(arch, "open");
+ if (nr_open == __NR_SCMP_ERROR)
+ goto fail;
+ nr_read = seccomp_syscall_resolve_name_arch(arch, "read");
+ if (nr_read == __NR_SCMP_ERROR)
+ goto fail;
- rc = seccomp_syscall_resolve_name_rewrite(SCMP_ARCH_NATIVE, "openat");
- if (rc != __NR_openat)
- goto fail;
+ name = seccomp_syscall_resolve_num_arch(arch, nr_open);
+ if (name == NULL || strcmp(name, "open") != 0)
+ goto fail;
+ free(name);
+ name = NULL;
+
+ name = seccomp_syscall_resolve_num_arch(arch, nr_read);
+ if (name == NULL || strcmp(name, "read") != 0)
+ goto fail;
+ free(name);
+ name = NULL;
+ }
return 0;