Skip to content

Commit 89b9107

Browse files
committed
Merge bitcoin/bitcoin#23178: util: Fix GUIX build with syscall sandbox
2d02799 util: Make sure syscall numbers used in profile are defined (W. J. van der Laan) 8289d19 util: Define SECCOMP_RET_KILL_PROCESS if not provided by the headers (W. J. van der Laan) Pull request description: Looks like we've broke the GUIX build in #20487. This attempts to fix it: - Define `__NR_statx` `__NR_getrandom` `__NR_membarrier` as some kernel headers lack them, and it's important to have the same profile independent on what kernel is used for building. - Define `SECCOMP_RET_KILL_PROCESS` as it isn't defined in the headers. ACKs for top commit: practicalswift: cr ACK 2d02799 Tree-SHA512: c264c66f90af76bf364150e44d0a31876c2ef99f05777fcdd098a23f1e80efef43028f54bf9b3dad016110056d303320ed9741b0cb4c6266175fa9d5589b4277
2 parents c4fc899 + 2d02799 commit 89b9107

File tree

1 file changed

+18
-8
lines changed

1 file changed

+18
-8
lines changed

src/util/syscall_sandbox.cpp

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,24 @@ bool g_syscall_sandbox_log_violation_before_terminating{false};
4040
#error Syscall sandbox is an experimental feature currently available only under Linux x86-64.
4141
#endif // defined(__x86_64__)
4242

43+
#ifndef SECCOMP_RET_KILL_PROCESS
44+
#define SECCOMP_RET_KILL_PROCESS 0x80000000U
45+
#endif
46+
47+
// Define system call numbers for x86_64 that are referenced in the system call profile
48+
// but not provided by the kernel headers used in the GUIX build.
49+
#ifndef __NR_statx
50+
#define __NR_statx 332
51+
#endif
52+
53+
#ifndef __NR_getrandom
54+
#define __NR_getrandom 318
55+
#endif
56+
57+
#ifndef __NR_membarrier
58+
#define __NR_membarrier 324
59+
#endif
60+
4361
// This list of syscalls in LINUX_SYSCALLS is only used to map syscall numbers to syscall names in
4462
// order to be able to print user friendly error messages which include the syscall name in addition
4563
// to the syscall number.
@@ -158,9 +176,7 @@ const std::map<uint32_t, std::string> LINUX_SYSCALLS{
158176
{__NR_getpmsg, "getpmsg"},
159177
{__NR_getppid, "getppid"},
160178
{__NR_getpriority, "getpriority"},
161-
#if defined(__NR_getrandom)
162179
{__NR_getrandom, "getrandom"},
163-
#endif // defined(__NR_getrandom)
164180
{__NR_getresgid, "getresgid"},
165181
{__NR_getresuid, "getresuid"},
166182
{__NR_getrlimit, "getrlimit"},
@@ -208,9 +224,7 @@ const std::map<uint32_t, std::string> LINUX_SYSCALLS{
208224
{__NR_lstat, "lstat"},
209225
{__NR_madvise, "madvise"},
210226
{__NR_mbind, "mbind"},
211-
#if defined(__NR_membarrier)
212227
{__NR_membarrier, "membarrier"},
213-
#endif // defined(__NR_membarrier)
214228
{__NR_memfd_create, "memfd_create"},
215229
{__NR_migrate_pages, "migrate_pages"},
216230
{__NR_mincore, "mincore"},
@@ -511,9 +525,7 @@ class SeccompPolicyBuilder
511525
{
512526
allowed_syscalls.insert(__NR_brk); // change data segment size
513527
allowed_syscalls.insert(__NR_madvise); // give advice about use of memory
514-
#if defined(__NR_membarrier)
515528
allowed_syscalls.insert(__NR_membarrier); // issue memory barriers on a set of threads
516-
#endif // defined(__NR_membarrier)
517529
allowed_syscalls.insert(__NR_mlock); // lock memory
518530
allowed_syscalls.insert(__NR_mmap); // map files or devices into memory
519531
allowed_syscalls.insert(__NR_mprotect); // set protection on a region of memory
@@ -593,9 +605,7 @@ class SeccompPolicyBuilder
593605

594606
void AllowGetRandom()
595607
{
596-
#if defined(__NR_getrandom)
597608
allowed_syscalls.insert(__NR_getrandom); // obtain a series of random bytes
598-
#endif // defined(__NR_getrandom)
599609
}
600610

601611
void AllowGetSimpleId()

0 commit comments

Comments
 (0)