# Seccomp开放系统调用列表

## 概述

Seccomp（Secure Computing Mode）是Linux内核提供的轻量级系统调用过滤机制。该机制自Linux 2.6.12版本首次引入以来，已从仅支持严格模式（Strict）的极简形态，演进为以Seccomp‑BPF（Berkeley Packet Filter）为核心的主流形态。

HarmonyOS采用Seccomp‑BPF模式，可通过BPF程序自定义系统调用过滤规则，精确限制进程可调用的系统调用范围，降低恶意代码利用内核漏洞带来的风险，提升进程、容器与应用的安全隔离性。

本文档聚焦在HarmonyOS环境下，Seccomp针对不同设备类型开放的系统调用列表，旨在帮助开发者：

1. 快速掌握不同设备在Seccomp下的系统调用管控差异。

2. 基于业务场景选择合适的接口调用，避免因系统调用限制导致功能异常。

## Seccomp机制简介

* 基本机制

  Seccomp策略以策略文件的形式存在。在编译构建阶段，相关脚本会先解析策略文件，生成包含BPF指令策略的源文件，再将其编译成策略动态库。在用户态进程启动过程中，通过Seccomp系统调用将BPF指令策略加载至内核。
* 基本特点

  * 子进程会继承父进程的Seccomp策略。
  * Seccomp策略在进程运行时加载到内核后，以单向链表形式存储于内存中，且内容不可修改。
  * 进程可多次设置Seccomp策略。进程执行系统调用时，内核会遍历单向链表中每个节点的策略并比较其返回值，最终取优先级最高的返回值。

## Seccomp机制导致进程终止的判定方法

查看进程faultlog日志，如果报错原因是signal:SIGSYS，且栈顶在ld-musl-{架构}.so.1库里，则进程终止可能是由Seccomp机制引起的。

```shell
cat /data/log/faultlog/faultlogger/cppcrash-xxxx
```

错误示例：

```txt
Process name:com.example.myapplication
Reason:Signal:SIGSYS(UNKNOWN)
Fault thread Info:
Tid:13893, Name:e.myapplication
#00 pc 000a5d30 /system/lib/ld-musl-arm.so.1(sethostname+16)(584c9d0a0e9000497bb0d66799a9526a)
#01 pc 00002f68 /data/storage/el1/bundle/libs/arm/libentry.so(test()+64)
```

## Seccomp符号列表

|系统调用|支持架构|支持设备|备注|
|:---------------------------|:------|:----|:-----------------------------------------------------------------------------------------------------------------------------------------|
|mbind|all|PC|-|
|mmap|arm64|全平台设备|-|
|mmap|riscv64|全平台设备|-|
|mmap2|arm|全平台设备|-|
|munmap|all|全平台设备|-|
|mremap|all|全平台设备|-|
|mprotect|all|全平台设备|-|
|msync|all|全平台设备|-|
|mlock|all|全平台设备|-|
|munlock|all|全平台设备|-|
|mlockall|all|全平台设备|-|
|munlockall|all|全平台设备|-|
|mincore|all|全平台设备|-|
|madvise|all|全平台设备|-|
|mlock2|all|全平台设备|-|
|membarrier|all|全平台设备|-|
|brk|all|全平台设备|-|
|remap_file_pages|arm|全平台设备|-|
|fork|arm|全平台设备|-|
|vfork|arm|全平台设备|-|
|exit|all|全平台设备|-|
|exit_group|all|全平台设备|-|
|waitid|all|全平台设备|-|
|wait4|all|全平台设备|-|
|set_tid_address|all|全平台设备|-|
|setpgid|all|全平台设备|-|
|getpgid|all|全平台设备|-|
|getsid|all|全平台设备|-|
|setsid|all|全平台设备|-|
|getpid|all|全平台设备|-|
|getppid|all|全平台设备|-|
|gettid|all|全平台设备|-|
|uname|all|全平台设备|-|
|personality|all|全平台设备|-|
|execve|all|全平台设备|-|
|execveat|all|全平台设备|-|
|clone|all|全平台设备|仅允许不包含以下命名空间标志的调用： CLONE_NEWNS、 CLONE_NEWPID、 CLONE_NEWNETCLONE_NEWCGROUP、 CLONE_NEWUTS、 CLONE_NEWIPC、 CLONE_NEWUSER 符合条件返回ALLOW，否则返回TRAP。|
|io_setup|all|全平台设备|-|
|io_destroy|all|全平台设备|-|
|io_submit|all|全平台设备|-|
|io_cancel|all|全平台设备|-|
|io_getevents|all|全平台设备|-|
|openat|all|全平台设备|-|
|open|arm|全平台设备|-|
|close|all|全平台设备|-|
|creat|arm|全平台设备|-|
|read|all|全平台设备|-|
|write|all|全平台设备|-|
|readv|all|全平台设备|-|
|writev|all|全平台设备|-|
|pread64|all|全平台设备|-|
|pwrite64|all|全平台设备|-|
|preadv|all|全平台设备|-|
|pwritev|all|全平台设备|-|
|preadv2|all|全平台设备|-|
|pwritev2|all|全平台设备|-|
|lseek|all|全平台设备|-|
|_llseek|arm|全平台设备|-|
|truncate|all|全平台设备|-|
|ftruncate|arm64|全平台设备|-|
|ftruncate|riscv64|全平台设备|-|
|truncate64|arm|全平台设备|-|
|ftruncate64|arm|全平台设备|-|
|fallocate|all|全平台设备|-|
|fcntl|all|全平台设备|-|
|fcntl64|arm|全平台设备|-|
|flock|all|全平台设备|-|
|mknodat|all|全平台设备|-|
|mkdirat|all|全平台设备|-|
|mkdir|arm|全平台设备|-|
|rmdir|arm|全平台设备|-|
|unlinkat|all|全平台设备|-|
|unlink|arm|全平台设备|-|
|symlinkat|all|全平台设备|-|
|symlink|arm|全平台设备|-|
|linkat|all|全平台设备|-|
|link|arm|全平台设备|-|
|renameat|arm|全平台设备|-|
|renameat|arm64|全平台设备|-|
|rename|arm|全平台设备|-|
|renameat2|all|全平台设备|-|
|chdir|all|全平台设备|-|
|fchdir|all|全平台设备|-|
|faccessat|all|全平台设备|-|
|access|arm|全平台设备|-|
|faccessat2|all|全平台设备|-|
|getcwd|all|全平台设备|-|
|getdents64|all|全平台设备|-|
|getdents|arm|全平台设备|-|
|readlinkat|all|全平台设备|-|
|readlink|arm|全平台设备|-|
|newfstatat|arm64|全平台设备|-|
|newfstatat|riscv64|全平台设备|-|
|fstatat64|arm|全平台设备|-|
|fstat|arm64|全平台设备|-|
|fstat|riscv64|全平台设备|-|
|stat64|arm|全平台设备|-|
|lstat64|arm|全平台设备|-|
|fstat64|arm|全平台设备|-|
|statfs|arm64|全平台设备|-|
|statfs|riscv64|全平台设备|-|
|statfs64|arm|全平台设备|-|
|fstatfs|arm64|全平台设备|-|
|fstatfs|riscv64|全平台设备|-|
|fstatfs64|arm|全平台设备|-|
|sync|all|全平台设备|-|
|fsync|all|全平台设备|-|
|fdatasync|all|全平台设备|-|
|syncfs|all|全平台设备|-|
|sync_file_range|arm64|全平台设备|-|
|sync_file_range|riscv64|全平台设备|-|
|sync_file_range2|arm|全平台设备|-|
|utimensat|all|全平台设备|-|
|utimensat_time64|arm|全平台设备|-|
|pipe2|all|全平台设备|-|
|pipe|arm|全平台设备|-|
|dup|all|全平台设备|-|
|dup3|all|全平台设备|-|
|dup2|arm|全平台设备|-|
|sendfile|all|全平台设备|-|
|sendfile64|arm|全平台设备|-|
|copy_file_range|all|全平台设备|-|
|vmsplice|all|全平台设备|-|
|splice|all|全平台设备|-|
|tee|all|全平台设备|-|
|readahead|all|全平台设备|-|
|fadvise64|arm64|全平台设备|-|
|fadvise64|riscv64|全平台设备|-|
|fadvise64_64|arm|全平台设备|-|
|quotactl|all|全平台设备|-|
|pivot_root|riscv64|全平台设备|-|
|statx|all|全平台设备|-|
|setxattr|all|全平台设备|-|
|lsetxattr|all|全平台设备|-|
|fsetxattr|all|全平台设备|-|
|getxattr|all|全平台设备|-|
|lgetxattr|all|全平台设备|-|
|fgetxattr|all|全平台设备|-|
|listxattr|all|全平台设备|-|
|llistxattr|all|全平台设备|-|
|flistxattr|all|全平台设备|-|
|removexattr|all|全平台设备|-|
|lremovexattr|all|全平台设备|-|
|fremovexattr|all|全平台设备|-|
|fchownat|all|全平台设备|-|
|fchown|arm64|全平台设备|-|
|fchown|riscv64|全平台设备|-|
|fchown32|arm|全平台设备|-|
|lchown32|arm|全平台设备|-|
|chown32|arm|全平台设备|-|
|getuid|all|全平台设备|-|
|getuid32|arm|全平台设备|-|
|geteuid|arm64|全平台设备|-|
|geteuid|riscv64|全平台设备|-|
|geteuid32|arm|全平台设备|-|
|getgid|arm64|全平台设备|-|
|getgid|riscv64|全平台设备|-|
|getgid32|arm|全平台设备|-|
|getegid|arm64|全平台设备|-|
|getegid|riscv64|全平台设备|-|
|getegid32|arm|全平台设备|-|
|setresuid|arm64|全平台设备|-|
|setresuid|riscv64|全平台设备|-|
|setresuid32|arm|全平台设备|-|
|getresuid|arm64|全平台设备|-|
|getresuid|riscv64|全平台设备|-|
|getresuid32|arm|全平台设备|-|
|getresgid|arm64|全平台设备|-|
|getresgid|riscv64|全平台设备|-|
|getresgid32|arm|全平台设备|-|
|getgroups|arm64|全平台设备|-|
|getgroups|riscv64|全平台设备|-|
|getgroups32|arm|全平台设备|-|
|setpriority|all|全平台设备|-|
|getpriority|all|全平台设备|-|
|capget|all|全平台设备|-|
|capset|all|全平台设备|-|
|umask|all|全平台设备|-|
|getrlimit|arm64|全平台设备|-|
|getrlimit|riscv64|全平台设备|-|
|ugetrlimit|arm|全平台设备|-|
|setrlimit|all|全平台设备|-|
|prlimit64|all|全平台设备|-|
|fchmod|all|全平台设备|-|
|fchmodat|all|全平台设备|-|
|chmod|arm|全平台设备|-|
|kill|all|全平台设备|-|
|tkill|all|全平台设备|-|
|tgkill|all|全平台设备|-|
|sigaltstack|all|全平台设备|-|
|rt_sigsuspend|all|全平台设备|-|
|rt_sigaction|all|全平台设备|-|
|sigaction|arm|全平台设备|-|
|rt_sigprocmask|all|全平台设备|-|
|rt_sigpending|all|全平台设备|-|
|rt_sigtimedwait|all|全平台设备|-|
|rt_sigtimedwait_time64|arm|全平台设备|-|
|rt_sigqueueinfo|all|全平台设备|-|
|rt_sigreturn|all|全平台设备|-|
|sigreturn|arm|全平台设备|-|
|signalfd4|all|全平台设备|-|
|timerfd_create|all|全平台设备|-|
|timerfd_settime|all|全平台设备|-|
|timerfd_gettime|all|全平台设备|-|
|timerfd_gettime64|arm|全平台设备|-|
|timerfd_settime64|arm|全平台设备|-|
|timer_create|all|全平台设备|-|
|timer_gettime|all|全平台设备|-|
|timer_gettime64|arm|全平台设备|-|
|timer_getoverrun|all|全平台设备|-|
|timer_settime|all|全平台设备|-|
|timer_settime64|arm|全平台设备|-|
|timer_delete|all|全平台设备|-|
|clock_gettime|all|全平台设备|-|
|clock_gettime64|arm|全平台设备|-|
|clock_settime64|arm|全平台设备|-|
|clock_getres|all|全平台设备|-|
|clock_getres_time64|arm|全平台设备|-|
|clock_nanosleep|all|全平台设备|-|
|clock_nanosleep_time64|arm|全平台设备|-|
|clock_adjtime64|arm|全平台设备|-|
|getitimer|all|全平台设备|-|
|setitimer|all|全平台设备|-|
|nanosleep|all|全平台设备|-|
|futex|all|全平台设备|-|
|futex_time64|arm|全平台设备|-|
|rt_tgsigqueueinfo|all|全平台设备|-|
|semtimedop_time64|arm|全平台设备|-|
|pidfd_send_signal|all|全平台设备|-|
|shmget|all|PC|-|
|socket|all|全平台设备|-|
|socketpair|all|全平台设备|-|
|bind|all|全平台设备|-|
|listen|all|全平台设备|-|
|accept|all|全平台设备|-|
|accept4|all|全平台设备|-|
|connect|all|全平台设备|-|
|getsockname|all|全平台设备|-|
|getpeername|all|全平台设备|-|
|sendto|all|全平台设备|-|
|recvfrom|all|全平台设备|-|
|setsockopt|all|全平台设备|-|
|getsockopt|all|全平台设备|-|
|shutdown|all|全平台设备|-|
|sendmsg|all|全平台设备|-|
|recvmsg|all|全平台设备|-|
|recvmmsg|all|全平台设备|-|
|recvmmsg_time64|arm|全平台设备|-|
|sendmmsg|all|全平台设备|-|
|sched_setparam|all|全平台设备|-|
|sched_setscheduler|all|全平台设备|-|
|sched_getscheduler|all|全平台设备|-|
|sched_getparam|all|全平台设备|-|
|sched_setaffinity|all|全平台设备|-|
|sched_getaffinity|all|全平台设备|-|
|sched_yield|all|全平台设备|-|
|sched_get_priority_max|all|全平台设备|-|
|sched_get_priority_min|all|全平台设备|-|
|sched_rr_get_interval|all|全平台设备|-|
|sched_rr_get_interval_time64|arm|全平台设备|-|
|sched_setattr|all|全平台设备|-|
|sched_getattr|all|全平台设备|-|
|ioprio_set|arm64|全平台设备|-|
|ioprio_set|riscv64|全平台设备|-|
|ioprio_get|arm64|全平台设备|-|
|ioprio_get|riscv64|全平台设备|-|
|perf_event_open|all|全平台设备|-|
|getcpu|all|全平台设备|-|
|getrusage|all|全平台设备|-|
|times|all|全平台设备|-|
|process_vm_readv|all|全平台设备|-|
|process_vm_writev|all|全平台设备|-|
|process_madvise|all|全平台设备|-|
|ioctl|all|全平台设备|-|
|inotify_init1|all|全平台设备|-|
|inotify_init|arm|全平台设备|-|
|inotify_add_watch|all|全平台设备|-|
|inotify_rm_watch|all|全平台设备|-|
|eventfd2|all|全平台设备|-|
|eventfd|arm|全平台设备|-|
|epoll_create1|all|全平台设备|-|
|epoll_create|arm|全平台设备|-|
|epoll_ctl|all|全平台设备|-|
|epoll_pwait|all|全平台设备|-|
|epoll_wait|arm|全平台设备|-|
|pselect6|all|全平台设备|-|
|pselect6_time64|arm|全平台设备|-|
|_newselect|arm|全平台设备|-|
|ppoll|all|全平台设备|-|
|ppoll_time64|arm|全平台设备|-|
|poll|arm|全平台设备|-|
|ptrace|all|全平台设备|-|
|restart_syscall|all|全平台设备|-|
|prctl|all|全平台设备|-|
|seccomp|all|全平台设备|-|
|getrandom|all|全平台设备|-|
|memfd_create|all|全平台设备|-|
|userfaultfd|all|全平台设备|-|
|gettimeofday|all|全平台设备|-|
|sysinfo|all|全平台设备|-|
|pidfd_open|all|全平台设备|-|
|pidfd_getfd|all|全平台设备|-|
|set_robust_list|all|全平台设备|-|
|cacheflush|arm|全平台设备|-|
|set_tls|arm|全平台设备|-|

