Seccomp开放系统调用列表

概述

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

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

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

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

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

Seccomp机制简介

  • 基本机制

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

  • 基本特点

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

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

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

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

错误示例:

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 全平台设备 -