diff --git a/man/systemd.exec.xml b/man/systemd.exec.xml index 2f62f1cd6b..fc3b9ffd16 100644 --- a/man/systemd.exec.xml +++ b/man/systemd.exec.xml @@ -1429,15 +1429,15 @@ CapabilityBoundingSet=~CAP_B CAP_C filter. The known architecture identifiers are the same as for ConditionArchitecture= described in systemd.unit5, as well as x32, mips64-n32, mips64-le-n32, and - the special identifier native. Only system calls of the specified architectures will be - permitted to processes of this unit. This is an effective way to disable compatibility with non-native - architectures for processes, for example to prohibit execution of 32-bit x86 binaries on 64-bit x86-64 - systems. The special native identifier implicitly maps to the native architecture of the - system (or more strictly: to the architecture the system manager is compiled for). If running in user mode, or - in system mode, but without the CAP_SYS_ADMIN capability (e.g. setting - User=nobody), NoNewPrivileges=yes is implied. Note that setting this - option to a non-empty list implies that native is included too. By default, this option is - set to the empty list, i.e. no system call architecture filtering is applied. + the special identifier native. If this setting is used, processes of this unit will only + be permitted to call native system calls, and system calls of the specified architectures. This is an + effective way to disable compatibility with non-native architectures for processes, for example to prohibit + execution of 32-bit x86 binaries on 64-bit x86-64 systems. The special native identifier + implicitly maps to the native architecture of the system (or more precisely: to the architecture the system + manager is compiled for). If running in user mode, or in system mode, but without the + CAP_SYS_ADMIN capability (e.g. setting User=nobody), + NoNewPrivileges=yes is implied. By default, this option is set to the empty list, i.e. no + system call architecture filtering is applied. Note that system call filtering is not equally effective on all architectures. For example, on x86 filtering of network socket-related calls is not possible, due to ABI limitations — a limitation that x86-64 diff --git a/src/shared/seccomp-util.c b/src/shared/seccomp-util.c index fbb232cd45..e4bc803132 100644 --- a/src/shared/seccomp-util.c +++ b/src/shared/seccomp-util.c @@ -935,7 +935,7 @@ int seccomp_load_syscall_filter_set_raw(uint32_t default_action, Hashmap* set, u /* If the system call is not known on this architecture, then that's fine, let's ignore it */ _cleanup_free_ char *n = NULL; - n = seccomp_syscall_resolve_num_arch(arch, PTR_TO_INT(id) - 1); + n = seccomp_syscall_resolve_num_arch(SCMP_ARCH_NATIVE, PTR_TO_INT(id) - 1); log_debug_errno(r, "Failed to add rule for system call %s() / %d, ignoring: %m", strna(n), PTR_TO_INT(id) - 1); } }